Subversion: Como comparar diferenças entre as mudanças recebidas?


19

Eu gostaria de ver as alterações que meus colegas de trabalho fizeram antes de aceitar as alterações recebidas.

Então eu começo obtendo o status

svn st -u

... o que me diz que eu tenho uma mudança de entrada

    *     9803   incomingChanges.html
M         9803   localChanges.html
M   *     9803   localAndIncoming.html

Eu posso ver o que eu mudei

svn diff localChanges.html

... mas como posso diferenciar localAndIncoming.htmlpara mostrar o que foi alterado e como é diferente da minha cópia de trabalho?


Não é uma resposta para sua pergunta de linha de comando, mas: no final, depois de saber o que é diferente da sua cópia de trabalho, você provavelmente desejará mesclar as alterações do repositório com suas próprias alterações. Ao usar alguma GUI para fazer isso, por que não usar uma GUI para ajudá-lo a fazer o diff inicial também? Ferramentas como o TortoiseSVN oferecem essa comparação. Além disso, IDEs como Eclipse pode fazer revisão de alterações de entrada (mesmo quando não há nada para merge - agradável para ter uma idéia do que seus colegas de trabalho têm sido até) muito fácil , evitando fusões automáticas.
Arjan

1
Existe uma maneira da GUI de ver as alterações recebidas usando o TortoiseSVN?
Christian

Você também gostaria de diferenciar incomingChanges.html, não?
Raffi Khatchadourian

Respostas:



2

A EFY svn difffornece um diff com base no arquivo não modificado armazenado no .svndiretório, não com base na versão do repo ativo.

Você pode executar o svn updatesubversion para tentar uma atualização (e possivelmente mesclar) e depois fazer uma svn diff, mas isso não é tão limpo quanto eu acho que você deseja.

Finalmente svn diff, o suporte é diferente apenas no repo. Exemplo:

svn diff svn://svnserver/repo/localChanges.html -r REV_NO

O padrão é comparar o HEAD com a revisão aprovada.


2

Com tortoisesvn (se você usa o Windows)

  • Chamar a tela de log

  • Selecionar revisão principal

  • Clique com o botão direito do mouse em localAndIncoming.html

  • Escolha Comparar com cópia de trabalho


0

Você realmente não pode até fazer o download da nova versão. Limitações como essa foram uma das grandes razões pelas quais um novo tipo de controle de origem se tornou popular ultimamente. É chamado controle de fonte descentralizado.
Com este novo formulário, você tem seu próprio repositório local e, em seguida, pode fazer alterações no repositório principal e fazer uma diferença, se não gostar das alterações feitas, você pode reverter seu próprio repositório e partir daí.

http://mercurial.selenic.com/

E sim, eu sei que sugerir que você troque de produto não é uma solução ideal, mas é uma solução, no entanto.


0

Faça outro checkout em uma nova pasta.

cd ..
svn checkout  /path/to/repo clean_working_copy

Se você reutilizar clean_working_copy, não se esqueça de atualizar antes

svn update clean_working_copy

Em seguida, compare seu arquivo com o de clean_working_copy

diff your_working_copy/localAndIncoming.html clean_working_copy/localAndIncoming.html

Ou com o seu diff de 3 vias preferido (o meu é kdiff3)

kdiff3 --L1 Base --L2 theirs --L3 mine your_working_copy/.svn/text-base/localAndIncoming.html clean_working_copy/localAndIncoming.html your_working_copy/localAndIncoming.html

Este trabalho, mas um scm deve fornecer uma maneira mais integrada.
rds 21/10

0

eu acho que

svn diff -r HEAD

quase dá o que você quer. A única coisa é que o + e - são revertidos em relação ao que você espera.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.