Subversion: добавить данные ревизии в файл кода при коммите - PullRequest
18 голосов
/ 05 января 2010

Существует ли простой способ, при фиксации файла, автоматически вставлять информацию в сам файл кода (например, автор, комментарий коммита, дату фиксации и т. Д.)? Я хотел бы, чтобы эта информация добавлялась в блок в верхней части каждого подтвержденного файла. По сути, вся история изменений должна быть документирована в каждом файле кода ...

Я вижу, что есть способ использовать свойства subversion для достижения чего-то похожего, но я не вижу, как получить фактический комментарий коммита в файл, а также не вижу, как сохранить текущий журнал, который вся история ревизий, а не только информация о последнем коммите.

Лично я не думаю, что это хорошая идея, поскольку файл кода должен содержать только код, но, к сожалению, это требование для моего текущего проекта.

Ответы [ 7 ]

17 голосов
/ 06 января 2010

Subversion поддерживает различные ключевые слова, такие как $Id$, $Author$, $Revision$ и так далее. Чтобы использовать их, вам нужно установить svn:keywords свойство соответственно. Однако вы не можете вставить комментарий коммита, как $Log$. См. Subversion FAQ по причинам, связанным с этим, и я могу только согласиться с приведенными там причинами. Помещение комментариев коммита в файл просто разбито по дизайну, и любой такой комментарий неверен в тот момент, когда вы не можете проверить его в хранилище.

Другие системы контроля версий также не поддерживают это, и большинство из них имеют схожие рассуждения (например, git ).

Пожалуйста, не спорьте с тем, что что-то подобное является "требованием для проекта". Если выпущенный код должен включать историю изменений, вы можете легко добавить эту историю при создании релиза с помощью некоторого вспомогательного скрипта. По крайней мере, Subversion просто не поддерживает это. И я бы решительно препятствовал бы попыткам добиться этого с помощью ловушки перед фиксацией. Ловушки фиксации не должны никогда изменять данные, которые фиксируются.

5 голосов
/ 05 января 2010

Я знаю, что это не тот ответ, который вы ищете, но я постараюсь отговорить их от этого.

Лучше всего было бы использовать подстановки ключевых слов, но SVN не предоставляет ключевое слово $Log$ по веским причинам (см. http://subversion.tigris.org/faq.html#log-in-source),, что является той же самой причиной, по которой я бы поспорил против входа в систему код.

2 голосов
/ 06 января 2010

Я бы предложил использовать CVS . Он имеет такую ​​возможность. CVS около 24 лет. Похоже, ваши требования к документации относятся к эпохе, когда контроль версий не был распространен, поэтому вам, вероятно, лучше всего использовать инструмент, созданный в ту эпоху.

1 голос
/ 05 января 2010

Я вижу, что есть способ использовать Subversion свойства чего-то достичь похоже, но я не вижу, как получить фактический комментарий коммита в файл, а также я не вижу, как сохранить текущий журнал, который имеет весь история пересмотра в отличие от просто Информация о последнем коммите.

Вы не хотите комментировать в вашем файле. Вот для чего, в конце концов, svn log.

0 голосов
/ 06 февраля 2019

Вот подход. Используйте второй инструмент управления версиями, например Visual Source Safe, который имеет ключевое слово History. Ниже я скажу VSS, но вы можете использовать любой старый инструмент, который имеет ключевое слово History или ключевое слово Log. Затем выполните двухэтапный процесс. [1] проверьте исходный файл в VSS. Это позволяет вам писать комментарии, и VSS обновит историю изменений в самом исходном файле. Если это удобно, вы можете выполнить многофайловую регистрацию за один шаг, и один и тот же комментарий будет вставлен во все отмеченные файлы. В качестве альтернативы, вы можете сделать файл комментариев по файлу. [2] проверьте полученный файл, который теперь обновляется с добавлением вашего последнего комментария к редакции, в Subversion, как обычно.

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

0 голосов
/ 06 января 2010

Мы используем $Revision: 9584 $ в некоторых наших исходных файлах, и ревизия обновляется каждый раз, когда ревизия этого конкретного файла изменяется. Но я почти уверен, что вы имели в виду что-то другое.

0 голосов
/ 06 января 2010

Кроме того, как вы говорите, будучи глупой идеей, я не могу придумать простой способ сделать это, используя встроенные методы SVN. Вам нужно будет просмотреть каждый файл после извлечения (или обновления) по сценарию, определить блок «change log» в этом файле и обновить этот блок с выводом svn log. Может быть сделано, но будет много работы, вам придется отслеживать каждую рабочую копию на предмет изменений, и это очень ресурсоемко.

Кроме этого, лучше всего работать с зацепкой после фиксации, но манипулирование файлами внутри хранилища вне контекста ревизии звучит ужасно, если вообще возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...