Alterar mensagem de confirmação SVN retroativamente?

85

Eu gostaria de reescrever um grande número de mensagens de confirmação SVN para uma estrutura diferente, por exemplo, prefixar uma categoria. De:

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

eu quero

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

Existe uma maneira fácil de fazer isso que não inclui despejar todo o repositório usando svndumpfilter?

Estou trabalhando com TortoiseSVN no lado do cliente e VisualSVN no lado do servidor. (VisualSVN é um invólucro em torno do clássico svn, com o qual posso falar por meio da linha de comando também.)

Pekka
fonte

Respostas:

98

Sim, as mensagens de confirmação podem ser alteradas. Eles são implementados como propriedades nas revisões, semelhantes às propriedades regulares do arquivo.

Na janela de log do TortoiseSVN você pode clicar com o botão direito em um commit e selecionar "Editar mensagem de log".

JesperE
fonte
+1 Obrigado por isso. Fiz alguns trabalhos envolvendo algumas alterações de API que queria confirmar separadamente para o resto, e escrevi a mensagem de log para refletir isso ... antes de comprometer todo o lote acidentalmente. Eu "consertei" confirmando uma alteração de espaço em branco com uma mensagem de log que explicava o resto! da próxima vez, saberei o que fazer.
Ed Daniel
1
Eu dei um +1 também, mas não funcionou com a mensagem "Repositório não foi habilitado para aceitar propchanges de revisão; peça ao administrador para criar um gancho pre-revprop-change". O administrador saberá automaticamente o que deve ser feito?
J.Merrill
19
Você está me perguntando se você tem um administrador de Subversion competente? :)
JesperE
@ J.Merrill Você deve navegar até a hookspasta no local do repositório e renomear pre-revprop-change.tmplpara pre-revprop-change.batpara que funcione.
sa_leinad 01 de
59

Você certamente pode alterar as mensagens de log retroativamente, isso é abordado no FAQ . Não tenho certeza de como funciona a interface de linha de comando para VisualSVN, mas para vanilla svn o comando seria

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

Se você quiser fazer isso para todas as revisões sem despejar o repositório e recarregar, você pode criar um script para este comando para trabalhar em uma lista de todas as revisões. Levaria algum tempo para fazer isso, dependendo do tamanho do seu repositório, mas, em princípio, não há razão para que você não possa fazer isso e não envolve um despejo e recarregamento.

Além disso, vanilla SVN tem um comando svnlookque é uma espécie de ferramenta administrativa que trabalha diretamente com os arquivos do repositório. Essa ferramenta não entende URLs (você deve ter acesso em nível de sistema de arquivos para o repositório), mas é muito mais rápida. A sintaxe é um pouco diferente, mas você pode modificar as propriedades da mesma maneira usando essa ferramenta.

Adam Bellaire
fonte
3
Obrigado @kazark, tive que fazer svn propedit -r N --revprop svn:logpara conseguir mudar a mensagem no meu editor.
tutuDajuju
3
Apenas para adicionar uma nota: por padrão, esse comando não funcionará, porque alterações nas propriedades de revisão não são permitidas por padrão. Para permitir isso, o administrador do svn deve criar um gancho chamado "pre-revprop-change" . Esta informação está no FAQ conforme mencionado acima.
Matthias
no Windows, você precisará definir a variável de ambiente "SVN_EDITOR", "VISUAL" ou "EDITOR" antes de executar o comando. Por exemplo:set SVN_EDITOR=notepad.exe
Conectado em
26

Sim, você pode, mas você precisa habilitá-lo no repositório primeiro.

No repositório, no diretório de ganchos, está um arquivo chamado pre-revprop-change.tmpl. Ele tem algumas páginas de comentários sobre o que faz e vem configurado para permitir apenas alterações nas propriedades do log. Para habilitá-lo, renomeie o arquivo para pre-revprop-change e torne-o executável (estou assumindo uma subversão hospedada em POSIX, se você estiver usando o Windows para hospedar, pode achar esta mensagem útil).

Uma vez que o repositório permitir, você pode usar o Tortoise para mudar a mensagem de log de um commit no menu do botão direito em um commit, ou você pode usar a linha de comando.

Andrew Aylett
fonte
+1 Excelentes informações, senhor. Ele não me deixa fazer isso sem um gancho pré-revprop-change. Terei que portar o script bash do template para o windows, mas isso não deve ser um problema.
Pekka
Eu adicionei um link para um script de comando de exemplo: svn.haxx.se/users/archive-2006-03/0107.shtml
Andrew Aylett
7

Use svn propsetna svn:logpropriedade. Exemplos no livro svn .

Josh Lee
fonte
2

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

URLacima é opcional se você já estiver em um diretório de trabalho. Um editor aparecerá para que a mensagem possa ser alterada.

Raffi Khatchadourian
fonte
1

Acabei de encontrar este post com o problema exato, usando o Tortoise SVN para cliente e VisualSVN em um servidor Windows.

Se acontecer de você ter uma mensagem de erro "uma solicitação DAV falhou" , dê uma olhada na resposta de Andrew Aylett e vá editar "pre-revprop-change.tmpl" no subdiretório de ganchos do seu repositório.

Uma vez feito isso, clicar em "editar mensagem de log" no menu contextual deve finalmente funcionar!

Julien B.
fonte