wiki:WF/utilizandobranches

Version 5 (modified by viani, 13 years ago) (diff)

--

Como Trabalhar com Branches do Sandbox Utilizando Comandos SVN

Como descrito anteriormente, tickets que exijam grandes modificações devem ser implementados em branches separados, ao invés de utilizar diretamente o trunk.

O primeiro passo é criar um novo branch:

  svn copy https://svn.expressolivre.org/sandbox/workflow/trunk 
           https://svn.expressolivre.org/sandbox/workflow/branches/{nnnn} 
           -m "Ticket #{nnnn} - Criando novo branch para implementação do ticket."

O comando svn copy é utilizado para a criação de branches. Na forma que é mostrado acima, este comando não precisa ser executado a partir de um repositório svn, todo procedimento é realizado no servidor. O primeiro parâmetro é o branch de origem, de onde serão copiados os dados. Os branches criados para os tickets da versão experimental do Workflow devem sempre utilizar o repositório /sandbox/workflow/trunk como origem. O segundo parâmetro especifica o endereço do novo branch. O novo branch deve seguir o padrão /sandbox/workflow/branches/{nnnn}, onde {nnnn} corresponde ao número do ticket. Já o terceiro parâmetro, especificado pela opção -m, especifica a mensagem do commit que criará o novo branch. É importante notar que o commit inicial de criação do branch, será visível apenas ao novo branch, mas não através do branch de origem (trunk). Desta forma, a partir do repositório de origem, não é possível determinar o momento exato de criação dos branches.

Após criado, o branch pode ser acessado de duas formas:

  svn checkout https://svn.expressolivre.org/sandbox/workflow/branches/{nnnn}

  para criar uma nova cópia local do repositório já em seu novo branch

ou:

  svn switch https://svn.expressolivre.org/sandbox/workflow/branches/{nnnn}

  para mudar o branch de sua cópia local.

Se estiver trabalhando com mais de um branch e utilizar o svn switch para alternar entre eles, sempre verifique a qual branch sua cópia local está ligada, antes de alterar arquivos, ou realizar commits. Isso evitará atualizações indesejadas que depois ficam difíceis de reverter. Utilizar o comando svn info para mostrar a url do repositório.

Outros Comandos SVN Úteis

svn up Atualiza a sua cópia local
svn st Mostra os arquivos da sua cópia local pendentes de atualização no repositório
svn log Lista as mensagens de commits já realizados
svn info Mostra a url do repositório e a revisão em que está a sua cópia local
svn revert {arquivo} Atualiza um arquivo local com a última revisão no repositório
svn ci -m "{mensagem}" Realiza a transferência dos arquivos alterados na cópia local, para o repositório

Como Realizar o Merge de um Branch no Trunk

Depois que o branch estiver concluído e testado, chegou a hora de transferir as atualizações para o ramo trunk do sandbox. Primeiro obtenha uma cópia local do ramo trunk, com o comando:

  svn co https://svn.expressolivre.org/sandbox/workflow/trunk

Depois entre no diretório da sua cópia local do trunk e execute o comando:

  svn merge --dry-run -r{n1}:{n2} https://svn.expressolivre.org/sandbox/workflow/branches/{nnnn}

  onde {n1} corresponde a revisão inicial do branch e
  {n2} corresponde a revisão final do branch 

A opção --dry-run irá rodar o merge em modo simulação, sem que alterações sejam realizadas na sua cópia local do trunk. Será apresentada uma lista dos arquivos a serem atualizados. Observe o indicador no início de cada linha, ele informa o tipo de atualização que o arquivo sofrerá, podendo ser:

U - Arquivo da cópia local será atualizado

D - Arquivo da cópia local será excluído

A - Arquivo será incluído na cópia local

G - Arquivo da cópia local possui alterações conflitantes com o branch, mas o Svn fará o merge

C - Arquivo da cópia local possui alterações conflitantes com o branch, e será necessário intervenção manual para resolver o conflito.

Se quiser prosseguir com o merge, execute o comando novamente sem a opção --dry-run. Caso existam conflitos, o svn solicitará que sejam resolvidos neste momento.

Após o merge verifique se a sua cópia local continua integra, e proceda o commit no repositório:

  svn ci -m "Ticket #{nnnn} - Merged {n1}:{n2} /sandbox/workflow/branches/{nnnn} em /sandbox/workflow/trunk" 

Existe ainda mais um comando útil para verificar alterações (exemplo):

  svn diff -r{n1}:{n2} https://svn.expressolivre.org/trunk/workflow

Isso irá listar as modificações entre as revisões {n1} e {n2} do ramo indicado.

Como Gerar um Arquivo diff e Aplicar um patch

  diff -u arquivo.orig arquivo.atual > arquivo.diff

  patch -u arquivo.orig arquivo.diff