svn merge (jeito simples)

Fazer um merge pode ser um pouco tenso para algumas pessoas, principalmente quando não se entende bem a lógica do merge no SVN. Na verdade, esse procedimento pode ser bem simples (pare, respire, tome um cafezinho e volte a fazer) ou bem complicado (se você não parar, respirar um pouco e sair para tomar um cafezinho). Sem mais enrolação, aqui vai um jeito bem simples e objetivo de fazer um merge entre dois ramos SVN. Primeiro, vamos desenhar uma situação: temos um ramo trunk (o principal) e um ramo branch (em que estamos trabalhando). Vamos trazer os últimos desenvolvimentos do ramo trunk para dentro do ramo branch, sem perder as nossas implementações (no ramo branch). Queremos que o svn merge apenas traga as atualizações que recebem para dentro do nosso branch.

Para isso, siga os passos seguintes:

1. Checkout do seu branch para a sua área de trabalho:

$ svn co https://endereco.alguma.coisa/projeto/branch/pasta pasta.branch

No comando acima, iremos criar uma nova pasta de nome “pasta” que contém todo o código que queremos atualizar a partir do trunk, utilizando o comando merge.

2. Entre na “pasta” criada e execute o comando svn merge como indicado:

$ cd pasta.branch/
$ svn merge https://endereco.alguma.coisa/projeto/trunk/pasta .

Observe bem que no final do comando svn merge, foi colocado um ponto “.”, que representa a pasta atual (pasta.branch) onde está o código do nosso branch, para o qual queremos trazer as atualizações contidas no ramo trunk do projeto.

Depois de algumas tentativas mais complicadas, essa foi a mais simples e que deu certo.

Pode ser que no seu caso essa solução não funcione como esperado, porque tudo depende de como você está trabalhando com o seu projeto no svn. É importante também ressaltar que, no exemplo dado acima, o ramos trunk contém o código mais atualizado e que, apenas alguma parte do código do ramo branch não existe no ramo trunk, ou seja, nossas criações no branch ainda não foram adicionadas ao trunk e tudo o queríamos eram apenas as últimas alterações do trunk, da parte do código em que não alteramos.

Criando um repositório SVN local

Para criar um repositório SVN é fácil. Basta escolher um local da máquina e rodar o seguinte comando:

$ svnadmin create nome_do_repositorio

Com isso, é criada uma pasta de nome “nome_do_repositorio” que é o repositório propriamente dito. Para utilizá-lo, tem que configurar dois arquivos: o svnserve.conf e o passwd. Ambos os arquivos estão dentro da pasta conf, dentro do repositório. No svnserve.conf, temos que configurar as permissões de leitura/escrita, o arquivo que conterá as senhas de acesso e o nome do repsoitório (realm), como se segue:

[general]
 ### These options control access to the repository for unauthenticated
 ### and authenticated users.  Valid values are "write", "read",
 ### and "none".  The sample settings below are the defaults.
 anon-access = read
 auth-access = write
### If SASL is enabled (see below), this file will NOT be used.
 ### Uncomment the line below to use the default password file.
 password-db = passwd
### This option specifies the authentication realm of the repository.
 ### If two repositories have the same authentication realm, they should
 ### have the same password database, and vice versa.  The default realm
 ### is repository's uuid.
 realm = Repositório local

No arquivo passwd.conf, adicionamos os usuários que terão acesso ao repositório, como abaixo:

carlos = carlos.

Para ativar o repositório basta rodar o seguinte comando:

$ svnserve -d -r /pasta/onde/esta/o/repositorio

No comando svnserve, o modificador “-d” é para daemon e “-r” é para indicar onde está o repositírio. Fácil não?