Como crio uma ramificação?


Respostas:


349

A ramificação no Subversion é facilitada por uma facilidade de cópia muito leve e eficiente.

Ramificação e marcação são efetivamente iguais. Apenas copie uma pasta inteira no repositório para outro lugar no repositório usando o svn copycomando

Basicamente, isso significa que é por convenção o que copiar uma pasta significa - seja um backup, etiqueta, ramificação ou qualquer outra coisa. Dependendo de como você deseja pensar sobre as coisas (normalmente dependendo de qual ferramenta SCM você usou no passado), você precisa configurar uma estrutura de pastas no seu repositório para suportar seu estilo.

Estilos mais comuns são para ter um monte de pastas na parte superior do seu repositório chamado tags, branches, trunk, etc. - que lhe permite copiar todo o seu trunk(ou sub-conjuntos) para os tagse / ou branchespastas. Se você tiver mais de um projeto, poderá replicar esse tipo de estrutura em cada projeto:

Pode demorar um pouco para se acostumar com o conceito - mas funciona - apenas verifique se você (e sua equipe) são claros quanto às convenções que você usará. Também é uma boa idéia ter uma boa convenção de nomenclatura - algo que indique por que a ramificação / tag foi feita e se ainda é apropriada - considere maneiras de arquivar ramificações obsoletas.


211
"svn copy" tem a vantagem de manter o histórico anterior à ramificação. Copiar manualmente para outro diretório não será.
WhyNotHugo

5
Observe também que geralmente é uma má idéia marcar ou ramificar subdiretórios do "tronco". Isso dificulta o controle de qual subdiretório foi ramificado, e a maioria das ferramentas fica confusa com esses desvios (por exemplo, alternar desvios significa a estrutura de diretórios das alterações do WC, o que confunde IDEs e cria ferramentas). Apenas sempre ramifique "tronco".
sleske

1
@Will Na verdade svn cpusa cópias baratas, não copia os arquivos reais durante a ramificação. Veja svnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung

607

Crie uma nova ramificação usando o svn copycomando da seguinte maneira:

$ svn copy svn+ssh://host.example.com/repos/project/trunk \
           svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
      -m "Creating a branch of project"

24
Em seguida, use svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(se você deseja alternar a saída atual para uma nova ramificação) ou svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(se você deseja ter uma nova ramificação em um diretório separado) para começar a trabalhar na ramificação recém-criada.
Jakub Narębski 14/10/12

3
Nota: em alguns casos, você precisaria usar a--parentsopçãosvn copy!
Jakub Narębski 15/10/12

1
por alguma razão eu usei esse cmd e ele não funcionou, mas quando mudei o svn + ssh para https apenas funcionou. Eu fiz algo errado? qual é o significado de svn + ssh? Obrigado!
Aviel Gross

você tem que criar primeiro um novo diretório em seu ramo -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "tornar o diretório ramos para conter todos os ramos"
Silvio Troia

Se eu omitir a -mopção, ele diz como svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. Com -misso diz svn: E205009: Local, non-commit operations do not take a log message or revision properties. (Substituí os endereços, mas eles existem, exceto, ofc, o novo diretório da filial e todo o caminho + URL que o SVN, por algum motivo, fundiu no erro) .
Hi-Angel

33

Se seu repo estiver disponível via https, use este comando para ramificar ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"

26
svn cp /trunk/ /branch/NEW_Branch

Se você tiver algumas alterações locais no tronco, use Rsyncpara sincronizar as alterações

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch

2
Não há requisitos para usar rsyncdessa maneira. svn cptambém copiará quaisquer alterações locais.
Kevin Panko

@KevinPanko Não copia alterações não confirmadas.
Parag Bafna

4
Sim, confirmado com o svn, versão 1.8.5
Kevin Panko 03/09

Eu estou pensando sobre isso. Essa parece ser a opção mais fácil, e a AFAI lembra: foi o que fiz quando estava trabalhando com o SVN há 3 anos. Mas qual é a diferença entre isso e os que trabalham diretamente com os URLs do servidor?
21416 oligofren

@KevinPanko Você sabe se ele também copia arquivos recém-criados?
John Hamilton

16

Suponha que você queira criar uma ramificação a partir de um nome de tronco (como "TEST") e use:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST

14

Normalmente, você o copia para svn + ssh: //host.example.com/repos/project/branches/mybranch, para que você possa manter várias ramificações no repositório, mas sua sintaxe é válida.

Aqui estão alguns conselhos sobre como configurar o layout do seu repositório .


13

Dica para novos usuários de SVN; isso pode ajudar um pouco na obtenção rápida dos URLs corretos.

Execute svn infopara exibir informações úteis sobre a filial com saída atual.

A URL deve (se você executar o svn na pasta raiz) fornecer a URL da qual você precisa copiar.

Também para alternar para o ramo recém-criado, use o svn switchcomando:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
Você também pode usar ^ no lugar da raiz do repositório
chim

11

Se você planeja mesclar sua filial, sugiro que você analise isso:

Svnmerge.py

Ouvi dizer que o Subversion 1.5 constrói mais o rastreamento de mesclagem, não tenho experiência com isso. Meu projeto está no 1.4.xe svnmerge.py salva a vida!


6
  • Crie uma nova pasta fora do seu projeto atual. Você pode dar qualquer nome a ele. (Exemplo: você tem uma finalização de compra para um projeto chamado "Personalização". E ele tem muitos projetos, como "Projeto1", "Projeto2" .... E você deseja criar uma ramificação de "Projeto1". Então, primeiro abra o " Personalização ", clique com o botão direito do mouse e crie uma nova pasta e dê um nome a ela," Project1Branch ").
  • Clique com o botão direito do mouse em "Myproject1" .... TortoiseSVN -> Branch / Tag.
  • Escolha cópia de trabalho.
  • Abra o navegador .... Paralelamente à direita em "Para URL".
  • Selecione a personalização ..... clique com o botão direito do mouse em Adicionar pasta. e vá até a pasta que você criou. Aqui está "Project1Branch". Agora clique no botão OK para adicionar.
  • Faça o checkout deste novo banco.
  • Novamente, vá para o seu projeto, qual ramo você deseja criar. Clique com o botão direito do mouse em TorotoiseSVN -> branch / tag. Em seguida, selecione a cópia de trabalho. E você pode dar o URL como o nome do seu ramo. como {seu endereço IP / svn / AAAA / Customização / Project1Branch}. E você pode definir o nome no URL para criar a pasta apenas com esse nome. Como {Seu endereço IP / svn / AAAA / Personalização / Project1Branch / MyProject1Branch}.
  • Pressione o botão OK. Agora você pode ver os registros ... sua cópia de trabalho será armazenada em sua filial.
  • Agora você pode dar uma olhada ... e deixar você aproveitar o seu trabalho. :)

-1

Abaixo estão as etapas para criar uma ramificação do tronco usando o TortoiseSVN na máquina Windows. Obviamente, isso precisa do cliente TortoiseSVN para ser instalado.

  1. Clique com o botão direito do mouse no tronco atualizado da máquina local do Windows
  2. Selecione TortoiseSVN
  3. Clique em ramificação / tag
  4. Selecione o caminho Para no repositório SVN. Observe que o URL de destino é atualizado de acordo com o caminho e o nome do ramo fornecido
  5. Não crie pasta dentro de ramificações no navegador de repositório
  6. Adicionar caminho de ramificações. Por exemplo, filiais /
  7. Adicione uma mensagem de log significativa para sua referência
  8. Clique em Ok, isso cria uma nova pasta no sistema local
  9. Faça o checkout do ramo criado em uma nova pasta
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.