Invertendo um dif ou remendo || diff CVS
Pergunta
No CVS, a minha cópia de trabalho (WC) é sobre um determinado ramo (que chamaremos de "foo"). Houve outras alterações verificados em foo por outro dev. Eu quero fazer uma comparação entre o meu WC eo estado a montante do foo. Normalmente, quando se trabalha no tronco (HEAD), eu só faço um diff cvs, e isso é bom. Mas por alguma razão ao fazer um cvs simples diff no ramo, o diff está vazio. Quando tento usar "cvs diff -r foo", os shows diff-se, mas é invertida -. Adições a montante são mostrados com desvantagens, e as remoções a montante são mostrados com vantagens
Como posso quer: (1) get CVS para diff "o outro lado" (mais de adições a montante), ou (2) invertido um patch (em geral)
Solução
Se o principal objetivo deste é verificar "o que é acima" no repo central, eu sugiro que você obter-se um funcional espectador CVS / navegador / web coisinha onde você pode navegar e ver as últimas alterações antes de atualizar. Mas, supondo que tudo que você tem é de linha de comando CVS, vou tentar dar-lhe uma solução de qualquer maneira:)
Então, o que temos aqui é uma foo
ramo que passou de A
-> B
, onde B
é o estado do ramo (no servidor) após check-in do outro desenvolvedor, e A
é o estado que você última actualização seu trabalho copiar.
Quando apenas fazendo um cvs diff
planície nesta situação, você verá suas alterações locais em comparação com A
desde A
é o que você fez check-out. O estado CVS local irá mostrar que cada arquivo vem da revisão A no ramo foo, e ao comparar com o seu cliente CVS irá baixar essa revisão a partir do servidor. No seu caso eu estou supondo que você não tem alterações locais desde a sua cvs diff
está vazio.
Então, quando você faz uma cvs diff -r foo
você está diffing seu A
local (ou A + muda) contra foo
do servidor (que atualmente está no B
) - e as mudanças necessárias para começar a partir B
do servidor para o seu A+changes
é exatamente o oposto de check-in do outro desenvolvedor, além de suas próprias mudanças locais.
Agora, se você realmente quer saber como B (ou a ponta-de-foo) compara a uma (a versão primitiva de tudo o que você tem atualmente check-out), o que eu acho que você tem a fazer é definir uma etiqueta na sua cópia de trabalho, então diff essa marca contra o estado do ramo. Algo parecido com isto:
cvs tag pistos_temp1
cvs diff -r pistos_temp1 -r foo
# And clean up by deleting the tag afterwards:
cvs tag -d pistos_temp1
Outras dicas
Talvez o que você quer pode ser feito usando interdiff do pacote patchutils.
muitas vezes eu usá-lo esta maneira de ver o que mudou no tronco para um determinado arquivo:
cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null
Você pode tentar exportar um arquivo do ramo a algum arquivo temporário e, em seguida, fazer diff entre a sua cópia de trabalho e este arquivo temporário. Parece ser a maneira mais fácil.