DES:SvnWEB

De Wiki Unioeste NTI
(Diferença entre revisões)
Ir para: navegação, pesquisa
(Novo Repositório)
(htpasswd)
 
Linha 18: Linha 18:
  
 
exemplo:
 
exemplo:
htpasswd -m /etc/svn-auth-file chris
+
htpasswd -m /etc/svn-auth-file [nome no dominio]
 
</pre>
 
</pre>
  

Edição atual tal como 11h03min de 1 de junho de 2015

Tabela de conteúdo

[editar] Introdução

A partir de 22/06/2009, os Sistemas Web da Unioeste encontram-se em um controlador de versão, o SubVersion.

Isso significa que, para editar qualquer código correspondente da pasta /var/www/sistemas (e /var/www/ccm inclusive), não é possível fazê-lo através de acesso direto, somente através do svn.

Para garantir que algumas funcionalidades destes sistemas não sofram degradação ou funcionamento inesperado devido a diferenças entre servidor de produção e desenvolvimento, o serviço de svn foi implantado através da técnica de manter o código após a importação no próprio servidor de produção, ainda que na pasta pessoal do programador, garantindo assim que não haja disparidades relativas a pacotes, ferramentas e outros programas ou métodos de acesso, que possam influenciar negativamente o funcionamento da cópia de desenvolvimento.

[editar] Comandos

[editar] apache

[editar] htpasswd

O SubVersion utiliza um módulo do apache para autenticar-se, via navegador, no repositório.

Para adicionar um usuário para autenticar-se, utilizamos o seguinte comando:

Obs: caso estejamos criando o primeiro usuário, acrescentar a opção -c ao comando, para criar o arquivo. Cuidado ao utilizar esta opção, pois, caso já exista um arquivo de usuários, o mesmo será sobrescrito e todos os usuários antigos serão perdidos.

htpasswd -m <arquivo> <usuário>

exemplo:
htpasswd -m /etc/svn-auth-file [nome no dominio]

[editar] SVN Admin

[editar] Novo Repositório

Para criar um novo repositório, é necessário criar a pasta na raiz do svn, setar as permissões corretas, criar os primeiros diretórios e, se necessário, o import inicial.

(como root)
/usr/local/bin/criasvn.sh [repositorio] (opcional: [import inicial])

Obs: durante o processo de criação do novo repositório, é criado o arquivo /var/svn/<novo repositório>/hooks/post-commit, que automaticamente fará o deploy quando forem comitadas alterações.

[editar] SVN

[editar] CheckOut

Para desenvolver através do SubVersion, devemos fazer uma cópia da última versão. Isto implica numa série de comandos, alguns somente uma vez, outros, a cada cópia.

É importante também salientar que usaremos como padrão a divisão trunk do projeto, onde trunk é o ramo principal de desenvolvimento. Qualquer alteração em tag ou branch necessita de comandos específicos, que não serão temas deste tutorial, ao menos por enquanto :)

O comando abaixo monta o diretório pessoal remoto na própria máquina, permitindo assim que usemos comandos como se fossem locais, isto é, como se estivéssemos copiando para a máquina cliente. Ao invés disso, estamos copiando-a no próprio servidor, mas na pasta do usuário.

sshfs 200.201.88.80:/home/<nome do usuário>/public_html <ponto de montagem> -o workaround=rename


exemplo:
sshfs 200.201.88.80:/home/chris/public_html /home/chris/svn -o workaround=rename

A seguir, entramos no diretório criado e montado e, para copiar os arquivos efetivamente, executamos o seguinte comando:

svn co http://cac-php.unioeste.br/svn/<sistema a ser trabalhado>/trunk <pasta destino>

exemplo:
svn co http://cac-php.unioeste.br/svn/ccm/trunk /home/chris/svn/ccm

[editar] CheckIn

Antes de realizarmos qualquer CheckIn no servidor, é salutar fazermos o update do código, para saber se não há alteração e, se necessário realizarmos o a resolução de conflito entre trechos de código.

Obs: é importante salientar que não é absolutamente necessário o update, assim como também são raras as ocasiões onde uma resolução de conflito se faz necessária, já que o svn é bem "esperto" e consegue resolver a grande maioria das diferenças de código, ainda que no mesmo arquivo (a excessão é a edição de um mesmo arquivo e em um mesmo trecho de código).

svn up http://cac-php.unioeste.br/svn/<sistema a ser comparado>/trunk

exemplo:
svn up http://cac-php.unioeste.br/svn/ccm/trunk


Para submeter o código trabalhado de volta ao servidor, existem duas opções:

Obs: ambas as opções necessitam que o prompt encontre-se na pasta onde encontra-se o código.

  • o código é enviado e é feito um deploy automático
svn ci -m "<log de mudança>"

exemplo:
cd /home/chris/svn/ccm
svn ci -m "alteração da mensagem de saudação"
  • o código é enviado sem, no entanto, enviá-lo para o servidor de produção (sem deploy)
    • Atenção: a posição no log da expressão ~~NODEPLOY~~ não importa, mas ela deve ser escrita exatamente desta maneira: toda maiúscula e usando os quatro ~, dois antes e dois depois.
svn ci -m "<log de mudança> ~~NODEPLOY~~"

exemplo:
svn ci -m "alteração de mensagem de saudação ~~NODEPLOY~~"


[editar] Merge

O svn merge nos permite juntar "ramos" de nosso código em um terceiro ramo ou em um dos já existente, fazendo a união de um ao outro.

Para realizarmos o merge de ramos, devemos estabelecer qual ramo será a versão final esperada. Por exemplo, trabalhando com um branch e um trunk, onde o branch é desenvolvimento e trunk é o principal, faremos um CheckOut inicial do trunk e depois o svn merge com o branch. Depois basta fazer o merge, sempre tomando CUIDADO para que o ramo destino esperado seja o primeiro parâmetro e o ramo que se juntará a ele, seja o segundo.

Obs: Há um caso especial, quando já estamos trabalhando com um dos ramos, mas é outro que será "commitado". Veja o item svn switch.

svn merge http://cac-php.unioeste.br/svn/<projeto>/<ramo destino> http://cac-php.unioeste.br/svn/<projeto>/<ramo que será unido ao destino>

exemplo (juntando um branch com o trunk):
svn merge http://cac-php.unioeste.br/svn/sgrf/trunk http://cac-php.unioeste.br/svn/sgrf/branches

[editar] undo

Outro uso para o merge é o retorno a uma revisão prévia, quando, por exemplo, algo foi desenvolvido entre duas versões e é necessário voltar àquela funcional.

svn merge -rHEAD:<versão>

exemplo (Está na versão 127 e queremos voltar à 123. Nova versão é criada como 128, sendo esta exatamente igual a 123):
svn merge -rHEAD:123

Obs: é necessário fazer um "CheckIn" após o processo para estabelecer a nova versão no servidor.

[editar] Outros

Existem mais alguns comandos importantes que devem ser conhecidos.

[editar] mkdir

Existem duas formas de usar o svn mkdir, que cria diretórios para a estrutura do svn:

  • svn mkdir CAMINHO...
    • Cada diretório especificado por um CAMINHO de cópia de trabalho é criado localmente e agendado para inclusão ao próximo commit.
  • svn mkdir URL...
    • Cada diretório especificado por URL é criado no repositório via um commit imediato.

Em ambos os casos, todos os diretórios intermediários devem já existir.

[editar] svn add

Se precisarmos adicionar um arquivo a estrutura do svn (a local, nossa cópia de desenvolvimento), copiar ou criar o arquivo no diretório não é o suficiente, precisamos também "informar" à estrutura svn que aquele arquivo foi adicionado. Assim, se copiarmos qualquer arquivo para a pasta local do svn mas não adicioná-lo com svn add, o arquivo não será "commitado" quando dermos o comando de CheckIn, não existindo na estrutura svn do servidor.

Para isso, usamos o comando svn add.

Obs: Para realizarmos a adição do arquivo a estrutura local do svn, precisamos, antes de mais nada, copiar o arquivo em questão para a pasta onde encontra-se o código. Todas estas alterações só terão efeito no servidor quando forem "commitadas", isto é, quando usarmos o comando de CheckIn.

cp <origem> <destino>
svn add <destino>

exemplo:
cp /home/chris/teste/style.css /home/chris/svn/css.css
svn add /home/chris/svn/css.css

Infelizmente o ADD do svn não eh recursivo ou seja se você precisa adicionar um número grande de arquivos ai complicou, pra facilitar um pouco a tarefa utilize o seguinte comando.

svn status | grep '^\?'' | sed -e 's/^? *\(.*\)/\1/;s/ /\\ /g' | xargs svn add

Eu sugiro converter isso ai em um script.sh pra nao ter que ficar digitando esse catatal de coisas

[editar] svn del

Da mesma forma que precisamos executar svn add para adicionar um arquivo a estrutura svn, também precisamos executar um comando para remover um arquivo da estrutura.

Obs: Assim como o svn add, o svn del manipula a relação do arquivo com a estrutura do svn. Mas, se removermos o arquivo fisicamente da estrutura (usando rm ou mv) sem, no entanto, usar o svn del, esta mudança NÃO se refletirá no servidor após o commit.

svn del <arquivo>

exemplo:
svn del /home/chris/svn/ccm/css.css

[editar] svn switch

Há um comando intermediário necessário, caso nossa cópia de trabalho não seja seu objetivo final, por exemplo, esteja trabalhando com o branch mas queira juntar esse com o trunk. Precisamos fazer primeiro um svn switch.

svn switch http://cac-php.unioeste.br/svn/<projeto>/<ramo destino>

exemplo (onde o branch é minha cópia de trabalho, mas será unido ao trunk):
svn switch http://cac-php.unioeste.br/svn/sgrf/trunk

[editar] Repositórios Externos

A propriedade svn:externals é útil para fazer checkout de diretórios a partir de outros repositórios. Desta forma é possível criar repositórios para partes de softwares comuns e adicioná-lo como referência externa em diversos projetos diferentes.

Após configurar uma propriedade deve-se utilizar os seguintes comandos:

svn ci -m "mensagem"
svn update

Isto irá fazer com que a propriedade seja enviada para o controle de versão e depois os diretórios dos repositórios externos sejam obtidos.

É importante lembrar que antes de configurar as propriedades, caso exista um diretório com o mesmo nome do diretório que será obtido do repositório externo, deve-se excluir este diretório do repositório atual.

[editar] svn propget

Este comando serve para pegar as propriedades configuradas em um determinado diretório. A sua syntaxe é:

svn propget propriedade diretório

Para pegar a propriedade svn:externals do diretório corrente usa-se o comando:

svn propget svn:externals .

[editar] svn propset

Este comando serve para configurar uma propriedade em um determinado diretório. A sua syntaxe é:

svn propset propriedade diretório

Para configurar o diretório atual para conter um diretório que é obtido de um repositório externo utiliza-se o seguinte comando:

svn propset svn:externals 'dir repositório_externo' .

Caso deseje configurar diversos diretórios para serem obtidos de um repositório externo crie um arquivo texto contendo todos os diretórios e referências no seguinte formato:

dir1 repositório_externo1
dir2 repositório_externo2
dir3 repositório_externo3
.
.
.

Para configurar o diretório para conter as definições informadas neste arquivo deve-se utilizar o seguinte comando:

svn propset svn:externals -F nome_do_arquivo .
Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas