Что продолжается здесь: Мерзавец оптимизирован для переключения между ответвлениями как можно быстрее. В частности, git checkout
разработан для не касания любых файлов, которые идентичны в обоих ответвлениях.
, К сожалению, замена ключевого слова RCS повреждает это. Например, использование $Date$
потребовало бы git checkout
касаться каждого файла в дереве при переключении ответвлений. Для репозитория размер ядра Linux это принесло бы все к визжащему останову.
В целом, Ваш лучший выбор состоит в том, чтобы отметить по крайней мере одну версию:
$ git tag v0.5.whatever
... и затем называют следующую команду от Вашего Make-файла:
$ git describe --tags
v0.5.15.1-6-g61cde1d
Здесь, мерзавец говорит мне, что я работаю над анонимными фиксациями версии 6 мимо v0.5.15.1 с хешем SHA1, начинающимся g61cde1d
. Если Вы засовываете вывод этой команды в *.h
файл где-нибудь, Вы находитесь в бизнесе и не будете иметь никакой проблемы при соединении выпущенного программного обеспечения назад с исходным кодом. Это - предпочтительный способ сделать вещи.
, Если Вы не можете возможно избегать использования ключевых слов RCS, можно хотеть запуститься с этого объяснение Lars Hjemli . В основном, $Id$
довольно легко, и Вы, если Вы используете git archive
, можно также использовать $Format$
.
, Но, если Вы абсолютно не можете избежать ключевых слов RCS, следующее должно запустить Вас:
git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"'
echo '$Date В моей системе, я добираюсь:
$Date: Tue Sep 16 10:15:02 EDT 2008$
при наличии затруднений, заставляя Escape оболочки в smudge
и clean
команды работать, просто запишите собственные сценарии Perl для расширения и удаления ключевых слов RCS, соответственно, и используйте те сценарии в качестве фильтра.
Примечание, что Вы действительно не хотите делать это для большего количества файлов, чем абсолютно необходимый, или мерзавец, потеряет большую часть своей скорости.
> test.html
echo 'test.html filter=rcs-keyword' >> .gitattributes
git add test.html .gitattributes
git commit -m "Experimental RCS keyword support for git"
rm test.html
git checkout test.html
cat test.html
В моей системе, я добираюсь:
$Date: Tue Sep 16 10:15:02 EDT 2008$
при наличии затруднений, заставляя Escape оболочки в smudge
и clean
команды работать, просто запишите собственные сценарии Perl для расширения и удаления ключевых слов RCS, соответственно, и используйте те сценарии в качестве фильтра.
Примечание, что Вы действительно не хотите делать это для большего количества файлов, чем абсолютно необходимый, или мерзавец, потеряет большую часть своей скорости.
Вы могли установить атрибут ident на своих файлах, но это произведет строки как
$Id: deadbeefdeadbeefdeadbeefdeadbeefdeadbeef$
, где deadbeef...
sha1 блоба, соответствующего тому файлу. Если Вам действительно нужно то расширение ключевого слова, и Вам нужно оно в мерзавце repo (в противоположность экспортируемому архиву), я думаю, что Вы оказываетесь перед необходимостью идти с ident
gitattribute с пользовательским сценарием, который делает расширение для Вас. Проблемой только с использованием рычага является тогда файл в рабочем дереве, не соответствовал бы индексу, и мерзавец будет думать, что это было изменено.
К сожалению, ключевое слово RCS замена нарушает это. Например, использование $ Date $ потребует git проверить, чтобы прикоснуться к каждому файлу в дерево при переключении ветвей.
Это неправда. $ Date $ и т. Д. Расширяются до значения, которое сохраняется во время проверки. В любом случае это намного полезнее. Таким образом, он не меняется в других ревизиях или ветвях, если файл не будет повторно возвращен. Из руководства RCS:
$Date$ The date and time the revision was checked in. With -zzone a
numeric time zone offset is appended; otherwise, the date is
UTC.
Это также означает, что предложенный выше ответ с фильтром rcs-keyword.smudge неверен. Он вставляет время / дату проверки или что-то еще, что вызывает ее запуск.