Как отредактировать сообщение журнала, уже зафиксированное в Subversion?

Я бы предположил, что вам нужно на самом деле переопределить оператор == для типов, которые вас интересуют. Будет ли компиляция / время выполнения по-прежнему жаловаться, даже если типы являются конвертируемыми implicity, вам нужно поэкспериментировать.

public static bool operator ==(a a, b b)
    {
        //Need this check or we can't do obj == null in our Equals implementation
        if (((Object)a) == null)
        {
            return false;
        }
        else
        {
            return a.Equals(b);
        }
    }

В качестве альтернативы просто используйте реализации Equals, такие как ole6ka, и убедитесь, что реализация делает нужное вам применение.

538
задан Community 23 May 2017 в 12:26
поделиться

6 ответов

По существу у Вас должны быть права администратора (прямо или косвенно) в репозиторий, чтобы сделать это. Можно или настроить репозиторий, чтобы позволить всем пользователям делать это, или можно изменить сообщение журнала непосредственно на сервере.

См. эта часть подрывная деятельность FAQ (шахта акцента):

сообщения Журнала сохранены в репозитории как свойства, присоединенные к каждому пересмотру. По умолчанию, свойство сообщения журнала (svn:log) не может быть отредактировано, как только оно фиксируется . Это вызвано тем, что изменения в свойствах пересмотра (которых svn:log - один) заставляют предыдущее значение свойства быть постоянно отмененным, и Подрывная деятельность пытается препятствовать тому, чтобы Вы делали это случайно. Однако существует несколько способов заставить Подрывную деятельность изменять свойство пересмотра.

первый путь для администратора репозитория для включения модификаций свойства пересмотра. Это сделано путем создания рычага, названного "pre-revprop-change" (см. этот раздел в книге Подрывной деятельности для получения дополнительной информации о том, как сделать это). Рычаг "pre-revprop-change" имеет доступ к старому сообщению журнала, прежде чем это будет изменено, таким образом, это может сохранить его в некотором роде (например, путем отправки электронного письма). Как только модификации свойства пересмотра включены, можно измениться, сообщение журнала пересмотра путем передачи - revprop переключаются на svn propedit или svn propset, как любой из них:

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

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

второй способ изменить сообщение журнала состоит в том, чтобы использовать svnadmin setlog. Это должно быть сделано путем обращения к местоположению репозитория в файловой системе. Вы не можете изменить удаленный репозиторий с помощью этой команды.

$ svnadmin setlog REPOS_PATH -r N FILE

, где REPOS_PATH является местоположением хранилища, N является числом пересмотра, сообщение журнала которого Вы хотите изменить, и РЕГИСТРИРУЕТЕ, файл, содержащий новое сообщение журнала. Если рычаг "pre-revprop-change" не существует (или Вы хотите обойти сценарий рычага по некоторым причинам), можно также использовать - опция обходных рычагов. Однако, если Вы решаете использовать эту опцию, быть очень осторожными. Можно обходить такие вещи как уведомления по электронной почте изменения или системы резервного копирования, которые отслеживают свойства пересмотра.

448
ответ дан TheJuice 23 May 2017 в 12:26
поделиться
svnadmin setlog /path/to/repository -r revision_number --bypass-hooks message_file.txt
36
ответ дан nickf 23 May 2017 в 12:26
поделиться

Если Ваш репозиторий позволяет установить свойства пересмотра через рычаг pre-revprop-change, Вы можете намного легче сообщения журнала изменений.

svn propedit --revprop -r 1234 svn:log url://to/repository

Или в TortoiseSVN, AnkhSVN и вероятно многих других клиентах подрывной деятельности путем щелчка правой кнопкой по записи в журнале и затем 'сообщению журнала изменений'.

9
ответ дан abc 23 May 2017 в 12:26
поделиться

Вот удобная вариация, которую я не вижу упомянутой в FAQ. Вы можете вернуть текущее сообщение для редактирования, указав текстовый редактор.

svn propedit svn:log --revprop -r N --editor-cmd vim
46
ответ дан 22 November 2019 в 22:23
поделиться

Я нашел хорошую реализацию стороны сервера pre-rev-prop-change рычагом в svnforum: https://www.svnforum. org/forum/opensource-subversion-forums/scripts-contributions/8571-pre-revprop-change-shell-script-allows-commiters-to-change-own-log-within-x-hours

Это реализует

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

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

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

Когда вы запускаете эту команду,

svn propedit svn:log --revprop -r NNN 

и на всякий случай вы увидите это сообщение:

Запрос DAV не удался; возможно что предварительное изменение репозитория хук либо не работает, либо не существует

Это потому, что Subversion не позволяет вам изменять сообщения журнала, потому что они не версионированы и будут потеряны навсегда.

Unix-hosted SVN

Перейдите в каталог хуков на вашем Сервер Subversion (замените ~ / svn / reponame на каталог вашего репозитория)

cd ~/svn/reponame/hooks

Удалите расширение

mv pre-revprop-change.tmpl pre-revprop-change

Сделайте его исполняемым (невозможно выполнить chmod + x!)

chmod 755 pre-revprop-change

Исходный код

Windows-hosted SVN

Файлы шаблонов в каталоге хуков использовать нельзя, так как они специфичны для Unix. Вам необходимо скопировать командный файл Windows pre-revprop-change.bat в каталог хуков, например, тот, который предоставлен здесь .

86
ответ дан 22 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: