Подтвердить что ты не робот

Subversion: добавление данных ревизии в файл кода при фиксации

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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