= 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 }}}