Por que não consigo editar uma mensagem de confirmação do SVN?

12

Eu estou usando SVN. Às vezes, sinto falta de algo quando escrevo uma mensagem de confirmação. Mas, uma vez confirmado, não pode ser revertido e nem eu consigo editar a mensagem. Por que eles não colocaram a função de edição nela?

Sanghyun Lee
fonte
7
Lembra-me da história de Dave.cpp em thedailtywtf
Falcon
1
Basta usar o git , ele permite mesclar confirmações, editar mensagens e fazer o que quiser com seu histórico.
SK-logic,
Ou, se não puder, use git-svne ninguém será mais sábio.
Matthew Scharley
@ Matthew: como na terra, com o git-svn, você pode alterar a história em um repositório svn desativado para edição de histórico?
gbjbaanb
2
@gbjbaanb: Não seria, se você já havia enviado para o servidor SVN. Mas se você confirmou apenas localmente, ainda pode alterar a mensagem de confirmação antes de enviá-la para o repositório ao vivo.
Matthew Scharley 01/09/11

Respostas:

15

De acordo com as Perguntas frequentes do SVN, é possível se o administrador do repositório o tiver ativado ou se você tiver acesso administrativo local ao repositório .

No entanto, fazer isso provavelmente é uma má idéia. Na verdade, você está mudando a história. Um dos pontos do controle de versão é manter um histórico e uma trilha de auditoria para o projeto. Permitir alterações arbitrárias no histórico anula a trilha de auditoria. Em vez disso, recomendo que você execute confirmações menores, escrevendo mensagens de confirmação concisas e explícitas e aprimorando seu fluxo de trabalho pessoal para evitar esses erros.

Thomas Owens
fonte
4
@ Matthew Mesmo no git, mudar a história a qualquer momento é, na minha opinião, uma péssima idéia. A história deve servir como uma trilha de auditoria e nunca deve ser alterada por ninguém a qualquer momento, por qualquer motivo.
Thomas Owens
2
Portanto, tenha uma trilha de auditoria para a mensagem de confirmação, porque geralmente o objetivo de alterar a mensagem de confirmação é facilitar o acompanhamento do histórico do projeto.
Peter Taylor
2
Suponha que eu descubra que uma mensagem de confirmação inserida há um mês é enganosa, confusa e totalmente errada . Não devo poder adicionar uma notação de correção que será vista por todos que virem a mensagem incorreta? (Concordo a mensagem original deve ser facilmente disponível modificado e a mudança em si deve ser monitorado e timestamped Mas eu discordo que isso constitui "mudar a história"..)
David Schwartz
2
Informações erradas são inaceitáveis; portanto, não se deve permitir que as pessoas corrijam ou esclareçam essas informações, pois isso ocultaria sua infidelidade. Uau. Apenas Uau.
David Schwartz
3
Você honestamente começa a parecer uma auto-paródia. "Tem que estar correto, portanto nunca deve ser corrigido."
David Schwartz
5

Essencialmente, você precisa ter direitos de administrador (direta ou indiretamente) no repositório para fazer isso. Você pode configurar o repositório para permitir que todos os usuários façam isso ou pode modificar a mensagem de log diretamente no servidor.

Consulte as Perguntas frequentes sobre SVN aqui.

As mensagens de log são mantidas no repositório como propriedades anexadas a cada revisão. Por padrão, a propriedade da mensagem de log (svn: log) não pode ser editada depois de confirmada. Isso ocorre porque alterações nas propriedades de revisão (das quais svn: log é uma) fazem com que o valor anterior da propriedade seja permanentemente descartado, e o Subversion tenta impedir que você faça isso acidentalmente. No entanto, existem algumas maneiras de fazer o Subversion alterar uma propriedade de revisão.

A primeira maneira é o administrador do repositório ativar as modificações das propriedades de revisão. Isso é feito através da criação de um gancho chamado "alteração pré-revisão" (veja esta seção no livro do Subversion para mais detalhes sobre como fazer isso). O gancho "pre-revprop-change" tem acesso à mensagem de log antiga antes de ser alterada, para que possa preservá-la de alguma forma (por exemplo, enviando um email). Depois que as modificações das propriedades de revisão estiverem ativadas, você poderá alterar a mensagem de log de uma revisão, passando a opção --revprop para svn propedit ou svn propset, como um destes:

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

onde N é o número da revisão cuja mensagem de log você deseja alterar e URL é o local do repositório. Se você executar esse comando em uma cópia de trabalho, poderá deixar de fora o URL.

A segunda maneira de alterar uma mensagem de log é usar svnadmin setlog. Isso deve ser feito consultando a localização do repositório no sistema de arquivos. Você não pode modificar um repositório remoto usando este comando.

$ svnadmin setlog REPOS_PATH -r N FILE

onde REPOS_PATH é o local do repositório, N é o número da revisão cuja mensagem de log você deseja alterar e FILE é um arquivo que contém a nova mensagem de log. Se o gancho "pre-revprop-change" não estiver no lugar (ou você desejar ignorar o script do gancho por algum motivo), também poderá usar a opção --bypass-hooks. No entanto, se você decidir usar esta opção, tenha muito cuidado. Você pode ignorar coisas como notificações por email da alteração ou sistemas de backup que controlam as propriedades da revisão.

Resposta de Kamil Kisiel em resposta a uma pergunta semelhante no Stack Overflow .

Abimaran Kugathasan
fonte
Ao copiar e colar uma resposta do stackoverflow, você deve pelo menos marcar como uma cotação e dar crédito ao OP (neste caso, Kamil Kisiel). Link para o original: stackoverflow.com/questions/304383/… Por favor, edite sua resposta ou eu vou votar contra você.
Falcon
4

Por ser um sistema centralizado de controle de versão - Assim que você confirma uma alteração (e sua mensagem de confirmação é por convenção vinculada à confirmação), todos os que têm acesso de leitura ao repositório podem ver essas informações. É uma má idéia mudar as informações depois de divulgadas , porque as pessoas acabam com uma opinião diferente da "realidade".

Os sistemas de controle de versão distribuído, como o Git, aliviam esse problema, garantindo que o ato de disponibilizar informações para outras pessoas seja atômico e sem informações adicionais, como mensagens de confirmação. Mas o mesmo princípio se aplica aqui: você é desencorajado de mudar as coisas localmente, que você já disponibilizou para outras pessoas.

l0b0
fonte
Eles poderiam permitir que várias versões da mensagem de confirmação ...
Alex Feinman
1
@ l0b0 não é objetivamente pior continuar a disseminar informações falsas, enganosas ou propensas a causar danos? A manutenção de registros não requer consagrar dados incorretos.
User179700
1
@ user179700: Você está certo. Há uma premissa de design fundamentalmente falha em todos os VCS que eu já vi: um commit possui uma mensagem de commit, imutável. Como Alex diz, devemos "permitir várias versões da mensagem de confirmação".
L0b0
@ l0b0 Estou achando essa pergunta interessante quanto mais a considero. Minha primeira reação foi no sentido de, apenas escreva com mais cuidado. A prática atual parece dificultar o processo. Também me pergunto se algum outro sistema implementa uma prática mais robusta. Chegou a hora de outra pergunta. 1
user179700
@ user179700: Atualmente, espero escrever um script que permita alterar uma mensagem de confirmação, mas apenas adicionando uma sequência adicional (com registro de data e hora). Isso permite corrigir erros, preservando a trilha de auditoria.
Tynam 4/12