Uma das vantagens de usar um sistema de controle de versão, como o Subversion, é a possibilidade de voltar atrás quando uma alteração foi indesejada.
Costumo falar para meus amigos que devemos commitar o código freqüentemente, sempre, sempre, sempre. O trabalho deve ser feito de forma incremental, uma pequena tarefas/alteração por vez, em passos de bebê.
Para desfazer uma mudança já commitada no repositório, basta seguir os passos descritos aqui: http://svnbook.red-bean.com/en/1.1/ch04s04.html
Suponha que você está trabalhando numa cópia de trabalho de
/calc/trunk
, e então descobre que uma mudança feita na revisão 303, que alterou o arquivo integer.c
, está completamente equivocada. A alteração nunca deveria ter sido commitada. Você pode utilizar o comando svn merge
para "desfazer" a mudança na sua cópia de trabalho, e depois commitar a modificação local para o repositório. Tudo que você precisa fazer é especificar uma diferenciação reversa:$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
U integer.c
$ svn status
M integer.c
$ svn diff
…
# verifique se a alteração indesejada foi removida
…
$ svn commit -m "Desfazendo mudança commitada em r303."
Sending integer.c
Transmitting file data .
Committed revision 350.
Uma revisão no repositório funciona como um grupo específico de alterações (changesets). Usando a opção
-r
, você está pedindo que o svn merge
aplique um changeset, ou um conjunto deles, a sua cópia de trabalho local. No caso acima, aplicamos o changeset #303 de forma reversa.Lembre-se que ao desfazer uma mudança, é recomendável usar o
svn status
e svn diff
para confirmar que seu trabalho está no estado correto, e depois usar o svn commit
para enviar a versão final ao repositório.Se você está pensando: "eu não desfiz um commit de verdade, certo? A mudança ainda está lá na revisão 303. Se alguém fizer checkout de uma versão entre 303 e 349, verão a mudança indesejada!"
Isso mesmo, o
svn merge
apenas "remove" a mudança indesejada do HEAD (última revisão) do repositório.Dica extra:
Para saber qual a versão atual do repositório, use o comandosvn info
.
Exemplos:
- Informações úteis sobre um arquivo:
$ svn info foo.c
Path: foo.c
Name: foo.c
URL: http://svn.red-bean.com/repos/test/foo.c
Revision: 4417
Node Kind: file
Schedule: normal
Last Changed Author: sally
Last Changed Rev: 20
Last Changed Date: 2003-01-13 16:43:13 -0600 (Mon, 13 Jan 2003)
Text Last Updated: 2003-01-16 21:18:16 -0600 (Thu, 16 Jan 2003)
Properties Last Updated: 2003-01-13 21:50:19 -0600 (Mon, 13 Jan 2003)
Checksum: /3L38YwzhT93BWvgpdF6Zw==
Informação sobre diretórios:$ svn info vendors
Path: trunk
URL: http://svn.red-bean.com/repos/test/vendors
Revision: 19
Node Kind: directory
Schedule: normal
Last Changed Author: harry
Last Changed Rev: 19
Last Changed Date: 2003-01-16 23:21:19 -0600 (Thu, 16 Jan 2003)
No comments:
Post a Comment