Resposta curta: um controlador de versão.
Resposta longa: não é incomum haver projetos em que mais de um programador desenvolve código simultaneamente. Uma solução para a sincronização do desenvolvimento é a criação de um repositório de código remoto (armazenado em alguma máquina na Internet) para onde cada programador fará o upload do seu código e de onde cada programador poderá fazer o download da versão mais recente do projeto (isto é, baixar modificações realizadas por outros programadores). O, então, Apache SVN é uma ferramenta que auxilia nessa sincronização e permite que versões anteriores sejam restauradas - mitigando o risco de perder partes importantes do projeto.
- Cadastre-se em https://www.assembla.com
- Obtenha acesso a https://subversion.assembla.com/svn/cinbox/
- Execute
svn checkout https://subversion.assembla.com/svn/cinbox/
No repositório local fica o código com o qual cada programador trabalha separadamente - isto é, seu workspace. As modificações realizadas no código que está no repositório local não são acessíveis para outros programadores até que seja feito o upload do código para o repositório remoto.
Depois de criado um novo arquivo, é necessário adicioná-lo ao SVN para que ele seja sincronizado.
Isso pode ser feito com o seguinte comando:
####svn add <nome do arquivo>
Uma vez adicionado, o arquivo está presente no repositório local mas só ficara disponível para outros
programadores (através do repositório remoto) quando o seguinte comando for executado:
####svn commit -m <mensagem informativa>
Mais uma vez, a mensagem informativa serve para avisar os outros programadores o que o seu upload
(muitas vezes chamado commit) adiciona ao projeto.
Para modificar arquivos já existentes nos repositórios (tanto local quanto remoto) basta aplicar as
mudanças desejadas e executar o comando
####svn update
Do mesmo modo como ocorre com o comando svn add
, o svn update
só surte efeito no repositório
remoto depois que se executa svn commit
.
Para remover um arquivo do projeto que está no repositório remoto não basta apenas deletá-lo no seu
work space e fazer um commit. Caso isso seja feito, o arquivo será restaurado no repositório local
depois que você sincronizá-lo com o repositório remoto (com o comando svn update
, visto adiante).
Para remover MESMO um arquivo, é necessário executar os seguintes comandos:
####svn delete <nome do arquivo>
- remove o arquivo
####svn update
- atualiza o repositório local
####svn commit
- aplica as mudanças do repositório local ao repositório remoto
Para copiar e mover arquivos é a mesma coisa - exceto pelo primeiro comando que seria, respectivamente
####svn cp <caminho para o arquivo> <caminho para cópia do arquivo>
ou
####svn mv <caminho para o arquivo atual> <caminho para nova localização do arquivo>
Antes de aplicar suas modificações ao repositório remoto (isto é, dar um svn commit
) é importante
ter em seu repositório local a versão mais recente dos arquivos no repositório remoto. Para pegar
atualizações no repositório remoto execute o comando:
####svn update
O comando acima faz com que o SVN mescle (merge) os arquivos remotos com os seus arquivos locais (se existir
qualquer diferença entre eles). Às vezes, há modificações remotas que conflitam com suas modificações
locais (no caso, por exemplo, de dois programadores terem alterado o mesmo arquivo). O SVN dá a
oportunidade de resolver esses conflitos após a execução do svn update
.
Depois de um merge que acarreta conflitos ser executado, o programador deve abrir os arquivos problemáticos
e editá-los para a versão que deve ser atualizada no repositório remoto - isto é, resolver os conflitos.
Após a resolução, executa-se:
####svn resolve --accept working <nome do arquivo>
Com o comando
####svn status
é possível averiguar quais modificações foram aplicadas no repositório local. A saída do comando gera um
log explicativo com as seguintes legendas:
- ? - indica um arquivo que não está sendo sincronizado (para sincronizar, use
svn add
) - C - indica um conflito que deve ser resolvido
- M - indica um arquivo que foi modificado
- A - indica arquivos adicionados
- D - indica arquivos removidos Para visualizar mais precisamente quais modificações foram aplicadas no working space, utiliza-se o comando:
####svn diff
Para evitar a temida linha de comando (terminal / bash), você pode utilizar um cliente SVN e executar as ações expostas aqui. Lista de clientes SVN.
- Tudo fica mais fácil, eficiente e seguro quando se faz com (uma distribuição bacana do) Linux.
- Aceito sugestões de melhorias deste singelo texto.