Изменить сообщение фиксации SVN задним числом?


85

Я хотел бы переписать большое количество сообщений фиксации SVN в другую структуру, например, префикс категории. Из:

"foo" now accepts "bar" format for connection string.

я хочу

core - database - "foo" now accepts "bar" format for connection string.

Есть ли простой способ сделать это, который не включает сброс всего репозитория svndumpfilter?

Я работаю с TortoiseSVN на стороне клиента и VisualSVN на стороне сервера. (VisualSVN - это оболочка для классической svnверсии, с которой я также могу разговаривать через командную строку.)

Ответы:


98

Да, сообщения фиксации можно изменить. Они реализуются как свойства ревизий, аналогично обычным свойствам файла.

В окне журнала TortoiseSVN вы можете щелкнуть правой кнопкой мыши фиксацию и выбрать «Редактировать сообщение журнала».


+1 Спасибо за это. Я проделал некоторую работу, связанную с некоторыми изменениями API, которые я хотел зафиксировать отдельно от остальных, и написал сообщение журнала, чтобы отразить это ... перед тем, как случайно зафиксировать всю партию. Я "исправил" это, зафиксировав изменение пробела с сообщением журнала, в котором объяснялось все остальное! в следующий раз я буду знать, что делать.
Эд Даниэль

1
Я также поставил этому +1, но затем он не работал с сообщением «Репозиторий не был включен для принятия изменений свойств ревизии; попросите администратора создать ловушку pre-revprop-change». Будет ли администратор автоматически знать, что нужно делать?
J.Merrill

19
Вы спрашиваете меня, есть ли у вас компетентный администратор Subversion? :)
JesperE

@ J.Merrill. Вы должны перейти к hooksпапке в местоположении репозитория и переименовать ее в, pre-revprop-change.tmplчтобы pre-revprop-change.batона работала.
sa_leinad 01

59

Вы, конечно, можете изменить сообщения журнала задним числом, это описано в FAQ . Я не уверен, как работает интерфейс командной строки для VisualSVN, но для vanilla svn команда будет

svn propset -r N --revprop svn:log "new log message" URL

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

Кроме того, в vanilla SVN есть команда, svnlookкоторая является своего рода административным инструментом, который работает непосредственно с файлами репозитория. Этот инструмент не понимает URL-адресов (у вас должен быть доступ к репозиторию на уровне файловой системы), но он работает намного быстрее. Синтаксис немного отличается, но вы можете точно так же изменять свойства с помощью этого инструмента.


3
Спасибо @kazark, мне нужно svn propedit -r N --revprop svn:logбыло изменить сообщение в моем редакторе.
tutuDajuju

3
Просто чтобы добавить примечание: по умолчанию эта команда не будет работать, потому что изменение свойств ревизии по умолчанию не разрешено. Чтобы разрешить это, администратор svn должен создать ловушку под названием "pre-revprop-change" . Эта информация находится в FAQ, как упоминалось выше.
Матиас

в Windows вам необходимо установить переменную среды «SVN_EDITOR», «VISUAL» или «EDITOR» перед запуском команды. Например:set SVN_EDITOR=notepad.exe
Enwired

26

Да, вы можете, но сначала вам нужно включить его в репозитории.

В репозитории, в каталоге хуков, есть файл pre-revprop-change.tmpl. У него есть пара страниц комментариев о том, что он делает, и он настроен так, чтобы разрешать только изменения свойств журнала. Чтобы включить его, переименуйте файл в pre-revprop-change и сделайте его исполняемым (я предполагаю, что это подрывная версия, размещенная на POSIX, если вы используете Windows для размещения, это сообщение может оказаться полезным для вас).

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


+1 Отличная информация, сэр. Это не позволит мне сделать это без хука до изменения версии. Мне придется перенести шаблонный сценарий bash в Windows, но это не должно быть проблемой.
Pekka

Я добавил ссылку на пример командного скрипта: svn.haxx.se/users/archive-2006-03/0107.shtml
Эндрю


2

svn propedit -r N --revprop svn:log URL

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


1

Только что наткнулся на этот пост с точной проблемой, используя Tortoise SVN для клиента и VisualSVN на сервере Windows.

Если у вас появляется сообщение об ошибке «Не удалось выполнить запрос DAV» , взгляните на ответ Эндрю Айлетта и отредактируйте «pre-revprop-change.tmpl» в подкаталоге хуков вашего репозитория.

Как только это будет сделано, нажатие «изменить сообщение журнала» в контекстном меню должно наконец заработать!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.