Pergunta

Eu entendo o conceito básico de um ramo e mesclagem. Todas as explicações que encontrei conversas sobre ramificar todo o seu porta -malas para criar um projeto de filial e trabalhar nele e depois mesclá -lo. É possível ramificar um subconjunto de um projeto?

Eu acho que um exemplo vai me ajudar a explicar melhor o que eu quero fazer. Suponha que eu tenha um aplicativo com dez arquivos file0 através do File10. Todos os arquivos são interdependentes e para poder testar qualquer arquivo que todos os outros precisem ser incluídos na compilação. Quero trabalhar no File0, mas não preciso fazer alterações no arquivo1 através do File10. Posso ramificar o arquivo0 para que as alterações comprometidas com o File0 atualizem algo como MyRepos/Branches/A-Branch/File0, mas todos os outros arquivos da minha cópia de trabalho serão simplesmente do tronco?

A razão pela qual quero fazer isso é que estou trabalhando em um enorme aplicativo J2EE com dezenas de milhares de arquivos e parece que a ramificação de tudo levará muito tempo. Além disso, estou usando o Eclipse com o Subclipse (e eu poderia estar errado sobre isso), mas parece que, se eu ramificar um projeto no Eclipse, terei que configurar um novo projeto Eclipse para apontar para a filial. Infelizmente, a importação deste projeto específico do SVN para o Eclipse leva várias horas devido ao tamanho do aplicativo. Não é realista para mim gastar tanto tempo.

Suponho que eu poderia ter os conceitos errados. Talvez ramificar um projeto inteiro não exija uma nova cópia de trabalho?

Obrigado por qualquer galpão de luz sobre esse assunto.

Foi útil?

Solução

Ramificar uma árvore inteira (uniforme) muito grande em subversão é um Operação muito barata, que faz cópia de arquivo preguiçosa (o (1)).

Você não precisa necessariamente alterar toda a sua cópia de trabalho para trabalhar em apenas um arquivo alterado. Você pode usar Switch SVN Para alternar um arquivo ou um diretório em sua cópia de trabalho para ser uma versão checida do arquivo na ramificação.

Outras dicas

Na subversão, fazer uma filial está simplesmente fazendo uma cópia de uma hierarquia de diretórios. Portanto, você pode ramificar um subconjunto, mas apenas se esse subconjunto puder ser definido por uma hierarquia de diretórios.

Posso ramificar o arquivo0 para que as alterações comprometidas com o File0 atualizem algo como MyRepos/Branches/A-Branch/File0, mas todos os outros arquivos da minha cópia de trabalho serão simplesmente do tronco?

Para responder a esta pergunta: Não, você não pode ramificar um único arquivo. No entanto, o que eu acho que você quer fazer é fazer um ramo e trabalhar file0 lá. Como você faz alterações para trunk arquivos, você simplesmente Merge -os em seu ramo onde você está trabalhando file0.

Dessa forma, você sempre terá as informações mais recentes de trunk, que permitirá que você teste o file0 mudanças independentemente do tronco. Então você pode usar svn switch Para mover sua "lente de arquivo" entre o porta -malas e a filial (mas cuidado, o Eclipse pode reclamar dessas travessuras).

A ramificação do SVN é baseada no mecanismo de cópia preguiçoso, para que você possa ramificar com segurança o seu projeto: isso não demoraria muito.

Como mencionado na pergunta "Como faço para ramificar um arquivo individual no SVN?", Você pode ramificar um subconjunto, mas acredito que isso seria perigoso com o SVN: mecanismo de propriedades Merginfo: Funciona melhor que a propriedade seja definida na raiz do projeto.

A ramificação no SVN é uma operação O (1). Além disso, como o SVN emprega internamente cópias preguiçosas, você só paga uma penalidade espacial pelo que muda.

Então, se você não tiver certeza, por que não ir em frente e ramificar todo o projeto?

(Como Quark mencionou, um problema com grandes projetos ramificados é que, se você verificar várias filiais/o porta -malas em paralelo, isso pode levar muito espaço em disco local.)

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