Pergunta

Eu quero converter um projeto CVS para o Subversion, usando cvs2svn. Tem um tronco principal (HEAD), com vários ramos de desenvolvimento temporários criados a partir do tronco.

Antes de convertê-lo, vamos mesclar as últimas alterações do tronco em todos os ramos dev. Mas eles também terão alterações que não foram incorporadas volta para o tronco ainda.

Quando eu converter o projeto para SVN, ele não terá qualquer uma das propriedades merge-história. Então, como posso inicializar essas propriedades, para que eu possa posteriormente mesclar de e para os ramos?

Em outras palavras, após a conversão, haverá uma série de diferenças entre o tronco e qualquer ramo. A próxima vez que eu mesclar a partir do tronco para o ramo, eu não quero ver essas diferenças como as mudanças que precisam ser mesclados. Mas quando eu fundir do ramo no tronco, eu faço. Isso é possível?

Atualizar : Eu levei a sugestão de mhagger, e disse SVN que os ramos tinha todas as alterações já se fundiram na partir do tronco:

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

Isso funciona, então da próxima vez que tentar mesclar a partir do tronco em um ramo, ele não mostra as novas alterações.

Mas ainda tenho um problema com fusões --reintegrate, da parte de trás ramificação para o tronco. Ele acaba mostrando um monte de "R" arquivos eplaced, o que significa que o tronco tem um arquivo X, eo ramo tem um arquivo X, mas eles não são considerados o mesmo arquivo. Isso faz com que o tipo de intercalação de confuso, embora pareça acabar com os resultados da direita.

Eu acho que isso acontece por causa da seguinte sequência de eventos:

  • Branch foi criado (em CVS)
  • Um arquivo X foi adicionado ao tronco (em CVS)
  • X foi incorporada pela filial (também em CVS)
  • Project foi convertido para o Subversion
  • Subversion não sabia que ramo / X foi copiado de trunk / X. Por isso, acha que é uma substituição.

A história SVN é algo como isto:

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

Assim, há uma maneira para eu dizer ao Subversion ignorar os arquivos ascendência ao fazer uma mesclagem --reintegrate? Ou uma melhor maneira de converter esses arquivos?

Foi útil?

Solução 2

OK, eu acho que tenho uma solução alternativa para o problema --reintegrate acima, no caso de qualquer pessoa interessada.

De acordo com a este documento , se eu 'já fundiu a versão mais recente do tronco para o ramo, fazendo um --reintegrate é essencialmente o mesmo que fazer isso para o tronco:

svn merge [trunk URL] [branch URL]

Mas esta sintaxe permite --ignore-ascendência, que --reintegrate não. Então eu posso fazer:

svn merge --ignore-ancestry [trunk URL] [branch URL]

Que me mostra os mesmos resultados que uma --reintegrate, sem todos os arquivos do "R" eplaced. A única outra diferença parece ser as propriedades mergeinfo. Eu não tenho certeza se estes vão ser correto, por isso é provavelmente melhor para apagar o ramo mais tarde, assim como você faria depois de um --reintegrate.

Outras dicas

Como você provavelmente sabe, cvs2svn não gera quaisquer metadados de mesclagem, exceto para as informações implícitas sobre onde ramos brotou. (Não pode, porque o CVS não registra tais informações.) Assim, após a conversão, você terá que dizer explicitamente Subversion sobre fusões que foram feitas sob CVS.

A maneira mais fácil de fazer isso é usando "svn merge --record-only ...", conforme descrito na o livro Subversion .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top