Qual é a melhor maneira de tornar uma das ramificações de um repositório do subversion o novo tronco?
Houve uma grande reescrita para todo o sistema: as coisas foram movidas, reescritas, substituídas, removidas, renomeadas etc. O código reescrito foi testado e está pronto para substituir o tronco antigo.
Basicamente, a linha principal antiga (Trunk 5) é marcada e termina aqui. A ramificação reescrita (Filial 6) deve se tornar a nova linha principal (Tronco 7):
Tronco (1) -> Tronco (2) -> Tronco (5) -> × + -> novo Tronco (7) \ \ | fork merge ??? \ \ | + -> Filial (3) -> Filial (4) -> Filial (6) - +
Todas as alterações em andamento do antigo 'tronco' já estão incorporadas no 'ramo reescrito'
Como posso fazer isso?
fonte
Concordo em usar o comando svn move para atingir esse objetivo.
Eu sei que outras pessoas aqui acham isso incomum, mas eu gosto de fazer dessa maneira. Quando tenho uma ramificação de recurso e estou pronto para mesclá-la com um tronco que também foi significativamente modificado, mesclarei-a em uma nova ramificação, geralmente denominada
<FeatureBranchName>-Merged
. Depois resolvo conflitos e testo o código mesclado. Depois de concluído, movo o tronco para a pasta de tags, para não perder nada. Por fim, mudo o meu<FeatureBranchName>-Merged
para o porta-malas.Além disso, eu prefiro evitar a cópia de trabalho ao fazer os movimentos, aqui estão alguns exemplos dos comandos:
Nota: eu uso 1.5
fonte
Eu estava apenas olhando para esse problema recentemente, e a solução com a qual eu estava muito feliz estava executando
svn merge --ignore-ancestry tronco-url ramo-url
na cópia de trabalho do meu porta-malas.
Isso não tenta aplicar alterações de maneira histórica (mantendo alterações no tronco). Simplesmente "aplica a diferença" entre o tronco e o ramo. Isso não criará conflitos para seus usuários nos arquivos que não foram modificados. No entanto, você perderá suas informações históricas da ramificação, mas isso acontece quando você realiza uma mesclagem de qualquer maneira.
fonte
Recomendamos que você faça essas alterações através da ferramenta de navegador do repositório.
Tentar grandes operações de exclusão + movimentação através da cópia de trabalho é uma ótima maneira de eliminar a cópia de trabalho. Se você for forçado a usar a cópia de trabalho, execute confirmações incrementais após cada operação de exclusão ou movimentação e ATUALIZE sua cópia de trabalho após cada confirmação.
fonte
Se você deseja tornar o ramo o novo tronco (ou seja, se livrar de todas as alterações feitas no tronco desde que o ramo foi criado, você pode) 1. Criar um ramo do tronco (para fins de backup) 2. "reverter alterações "no tronco (selecione todas as revisões depois que a ramificação foi criada) 3. Mesclar a ramificação de volta ao tronco.
A história deve permanecer assim.
Atenciosamente, Roger
fonte
As soluções @Aaron Digulla e @kementeus são viáveis. Para repositórios do Subversion 1.4, operações de copiar / mover podem dificultar a migração futura para uma estrutura de repositório diferente ou dividir os repositórios.
Acredito que as melhorias do 1.5 incluem melhor resolução do histórico de movimentação / cópia, portanto, provavelmente não seria um problema para um repositório 1.5.
Para um repositório 1.4, eu recomendo usar
svnadmin dump
esvndumpfilter
executar o movimento do tronco existente em outro lugar, movendo o ramo para o tronco com o mesmo mecanismo. Carregue os dois arquivos de despejo em um repositório de teste, verifique e mova-o para produção.Obviamente, faça backup do seu repositório existente antes de iniciar.
Isso preserva o histórico sem registrar explicitamente a movimentação / cópia e facilita a reorganização futura, preservando o histórico.
Editar: conforme solicitado, a documentação do comportamento 1.4, do livro 1.4 Red-Bean, Filtering Repository History
Isso se aplica a migrações / reorganizações usando
svndumpfilter
. Há momentos em que um pouco de trabalho extra agora pode economizar muito trabalho mais tarde e, mantendo um uso fácil dosvndumpfilter
disponível para futuras migrações / reorganizações, reduz o risco a um custo relativamente baixo.fonte
Embora as respostas acima funcionem, elas não são práticas recomendadas. A mais recente faixa de servidor e cliente svn é mesclada para você. Então, o svn sabe quais revisões você fundiu em um ramo e de onde. Isso ajuda muito ao manter uma filial atualizada e depois mesclá-la novamente ao tronco.
Não importa qual versão do Subversion você esteja usando, existe um método de práticas recomendadas para obter alterações em uma ramificação de volta ao tronco. Ele está descrito no manual do Subversion: Controle de Versão com o Subversion, Capítulo 4. Ramificação e Mesclagem, Mantendo uma Ramificação em Sincronização .
fonte
É uma configuração realmente estranha / incomum no SVN, mesmo que eu esteja longe de ser uma "boa prática", de qualquer forma, acho que você poderia fazer algo como:
Boa sorte
fonte