Контакт с расширением ключевого слова SVN с мерзавцем-svn

42
задан Community 23 May 2017 в 11:46
поделиться

3 ответа

Что продолжается здесь: Мерзавец оптимизирован для переключения между ответвлениями как можно быстрее. В частности, 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, соответственно, и используйте те сценарии в качестве фильтра.

Примечание, что Вы действительно не хотите делать это для большего количества файлов, чем абсолютно необходимый, или мерзавец, потеряет большую часть своей скорости.

39
ответ дан emk 26 November 2019 в 23:49
поделиться

Вы могли установить атрибут ident на своих файлах, но это произведет строки как

$Id: deadbeefdeadbeefdeadbeefdeadbeefdeadbeef$

, где deadbeef... sha1 блоба, соответствующего тому файлу. Если Вам действительно нужно то расширение ключевого слова, и Вам нужно оно в мерзавце repo (в противоположность экспортируемому архиву), я думаю, что Вы оказываетесь перед необходимостью идти с ident gitattribute с пользовательским сценарием, который делает расширение для Вас. Проблемой только с использованием рычага является тогда файл в рабочем дереве, не соответствовал бы индексу, и мерзавец будет думать, что это было изменено.

1
ответ дан Lily Ballard 26 November 2019 в 23:49
поделиться

К сожалению, ключевое слово 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 неверен. Он вставляет время / дату проверки или что-то еще, что вызывает ее запуск.

22
ответ дан 26 November 2019 в 23:49
поделиться