Pergunta
Acabei de fazer uma mesclagem usando algo como:
svn merge -r 67212:67213 https://my.svn.repository/trunk .
Eu só tinha 2 arquivos, um dos quais é simples ChangeLog
.Em vez de apenas fundir meu ChangeLog
mudanças, na verdade puxou o meu mais alguns anteriores que não estavam no destino ChangeLog
.Percebi que houve um conflito quando executei --dry-run, então atualizei ChangeLog
, e ainda havia um conflito (e eu vi o conflito quando fiz a mesclagem real).
Posteriormente, diferenciei o arquivo do qual estava mesclando:
svn diff -r 67212:67213 ChangeLog
E vejo apenas as mudanças que fiz, então sei que as mudanças extras não chegaram lá de alguma forma.
Isso me deixa preocupado porque a mesclagem não está apenas pegando o que eu mudei, que é o que eu esperava.Alguém pode explicar o que aconteceu?
ATUALIZAR:Em resposta a NilObject:
Então, eu tenho 2 arquivos alterados, apenas o ChangeLog é relevante, o outro mesclado corretamente.Quando vou para meu checkout normal de tronco, executo o comando diff acima e vejo:
Index: ChangeLog
===================================================================
--- ChangeLog (revision 67212)
+++ ChangeLog (revision 67213)
@@ -1,3 +1,7 @@
+2008-08-06 Mike Stone <myemail>
+
+ * changed_file: Details.
+
2008-08-06 Someone Else <their_email>
* theirChanges: Details.
Após mesclar as alterações anteriores, a diferença do ChangeLog fica assim:
Index: ChangeLog
===================================================================
--- ChangeLog (revision 67215)
+++ ChangeLog (working copy)
@@ -1,3 +1,14 @@
+<<<<<<< .working
+=======
+2008-08-06 Mike Stone <myemail>
+
+ * changed_file: Details.
+
+2008-08-06 Someone Else <their_email>
+
+ * theirChanges: Details.
+
+>>>>>>> .merge-right.r67213
2008-08-05 Someone Else2 <their2_email>
* olderChange: Details.
Observe que a entrada que foi extraída incorretamente não estava no arquivo ao qual estou mesclando, mas ainda assim não foi uma das minhas alterações e não deveria ter sido mesclada de qualquer maneira.Foi fácil de consertar (remover as linhas extras que não faziam parte das minhas alterações), mas ainda me preocupa em mesclar automaticamente SVN
.
Solução
Isso só acontece com conflitos - basicamente o svn tentou mesclar a mudança, mas (grosso modo) viu a mudança como:
Adicionar
2008-08-06 Mike Stone <myemail>
* changed_file: Details.
antes
2008-08-06 Someone Else <their_email>
E não foi possível encontrar a linha de Outra Pessoa ao fazer a mesclagem, então coloquei essa parte no contexto ao colocar o conflito.Se fosse uma mesclagem não conflitante, apenas as alterações esperadas teriam sido aplicadas.
Outras dicas
Não há informações suficientes para continuar aqui.
svn merge -r 67212:67213 https://my.svn.repository/trunk .
irá mesclar todos os arquivos alterados na revisão 67212 na pasta /trunk no repositório e mesclá-los em seu diretório de trabalho atual.Se você fizer:
svn log -r 67212
Quais arquivos ele mostra alterados?Merge apenas extrairá alterações do primeiro argumento e as aplicará ao segundo.Ele não faz upload de volta para o servidor no primeiro argumento.
Se isso não responder à sua pergunta, você poderia postar mais detalhes sobre o que exatamente está acontecendo?