Version 5 (modified by viani, 12 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