SVN: É possível que as alterações sejam propagadas para diferentes versões de um arquivo?

4

Eu usei as funcionalidades básicas do SVN antes de verificar o código e verificá-lo. Eu nunca toquei em galhos e coisas mais complexas como essa. É possível usar o SVN para que eu possa manter uma versão principal de um arquivo de código-fonte, fazer uma versão ligeiramente diferente para um projeto diferente e, em seguida, fazer com que quaisquer alterações na versão principal sejam copiadas para as outras versões sem sobrescrever as alterações feito para essas outras versões?

Eu meio que duvido que é possível lidar facilmente sem ter que lidar manualmente com conflitos, então deixe-me fazer uma pergunta alternativa: Se eu fiz um repositório com uma espécie de biblioteca comum de código e fiz alterações específicas em qualquer projeto para isso em arquivos separados usando herança de classe, é possível configurá-lo para que haja dois repositórios com check-out na mesma pasta?

    
por Telanor 24.09.2010 / 01:36

4 respostas

4

Isso é uma coisa difícil de fazer no SVN. Isso requer muita mesclagem manual e é propenso a erros. No entanto, se você tiver a opção, como @ Ash menciona , os sistemas de controle de versão distribuída lidam bem com esse cenário. Em particular, eu sei que o Git torna isso extremamente fácil.

O comando git-rebase faz exatamente o que você deseja. Supondo que você tenha uma ramificação principal ou de "origem" de sua origem, basta criar uma nova ramificação ("mywork") para ativar as alterações específicas do projeto (representadas pelo bloco C6).

Agora,comoaramificaçãoprincipaldocódigocontinuaamudar(revisãoC3eC4),vocêapenasrebasesuaramificaçãoespecíficadoprojetoparaanovarevisãoevocêobterátodasasalteraçõesfeitasnaramificaçãoprincipalnoramodoseuprojeto.

Ainda existe a possibilidade de se fazer uma mesclagem manual, mas a probabilidade de ter que fazer isso é muito menor. Git tira muito da dor de executar a operação de mesclagem. Confira o capítulo de rebatimento do Git Book para mais informações.

    
por 24.09.2010 / 08:02
1

Eu acho que isso é muito difícil de fazer com o subversion (pelo menos versões atuais), se não impossível, mas um sistema de controle de versão distribuído irá lidar com isso. Eu usei o Mercurial para resolver esse problema:

No lado "servidor":

  • Crie um repositório "master"
  • Clone esse repositório para tornar a versão específica do projeto do repositório (a clonagem está duplicando todo o repositório em outro lugar)

No lado "cliente":

  • Clone o repositório do projeto na sua área de desenvolvimento e confira
  • Faça alterações, faça muitos pedidos localmente e retorne ao servidor conforme apropriado

Se ocorrerem alterações no mestre, elas poderão ser "puxadas" para o repositório específico do projeto, que fluirá para o repositório local. Se as alterações feitas no repositório específico do projeto forem consideradas adequadas para o "mestre", elas poderão ser enviadas de volta para ele. O Mercurial lembra os caminhos entre repositórios pais, então tudo se encaixa. Mescla entre filiais (que você tende a usar muito mais) e os repositórios são geralmente sem dor. Uma desvantagem é que o Mercurial não permite a "seleção seletiva" de atualizações, mas isso pode ser uma vantagem, já que evita problemas potenciais em futuras fusões.

Há provavelmente uma curva de aprendizado maior em fazer tudo isso, mas pode valer a pena investigar.

    
por 24.09.2010 / 06:16
1

A resposta curta é "não". O problema que você descreve é mesclar as ramificações quando há uma alteração. Existem ferramentas que ajudarão , mas no final você está mesclando dois ramos de código que têm ambos mudaram. Esta situação pode causar um conflito que exigirá intervenção humana.

    
por 24.09.2010 / 06:59
0

Esta pergunta não é muito melhor sobre SO (que tem mais de 5.000 perguntas sobre SVN)? Vejo que há algumas perguntas sobre o SVN aqui, mas não sei o que o torna mais adequado para qualquer site.

    
por 24.09.2010 / 02:03