SVN: Como configurar uma ramificação somente leitura no Subversion?

4

Como desenvolvedor web principal para a organização do meu empregador, sou responsável por configurar e manter um repositório SVN para cada um de nossos aplicativos da web. Cada um tem várias versões arquivadas e pelo menos alguns ramos.

Atualmente, para implantar a versão mais recente de cada site, eu "exporto" a versão marcada apropriada para o diretório do qual o Apache atende esse site. Por exemplo, supondo que eu tenha uma cópia de trabalho registrada em / var / www / dev / app:

$ cd /var/www/dev/app/archive/1.2
$ svn export . /var/www/html/www.myapp.com

Mas, na verdade, eu ainda gostaria de ter o site ativo vinculado a uma versão do repositório, para que eu possa fazer uma "atualização svn" para obter as atualizações mais recentes; Eu simplesmente não quero que nenhum arquivo ou pequena modificação no diretório de implantação ao vivo seja enviada de volta para o repositório.

O que eu gostaria de fazer é criar uma ramificação somente leitura no repositório que sempre contém a versão de produção mais recente do aplicativo, que eu posso verificar no diretório de implantação.

Eu já vi isso feito com muitos projetos de código aberto, onde qualquer um pode verificar uma ramificação específica do aplicativo, mas é uma ramificação somente leitura , para que você não possa confirmar novamente para isso.

Como posso conseguir isso?

    
por Brian Lacy 13.12.2010 / 18:19

3 respostas

1

Se você estiver usando o Apache para fazer interface com seus pedidos do Subversion, você pode usar o Arquivo de Autorização do Subversion para controlar o acesso a todos os locais das tags. A partir daí, você pode configurar seu servidor da Web para ter sua própria conta autorizada como somente leitura para a pasta de tags. Você pode até ter o servidor web sem ter acesso de leitura a qualquer outra coisa além do diretório de tags em certos caminhos.

Se você sempre criar uma tag com o mesmo nome que é usada para a implantação de produção, então uma atualização svn funcionará. Caso contrário, você pode fazer um switch svn para ir entre as tags, conforme necessário. De acordo com o livro do Subversion , o svn update e o svn mudam muito bem, fazem a mesma coisa sob o capô.

Agora, a vantagem de usar isso, você também pode fornecer um controle mais granular do que seus desenvolvedores podem e não podem fazer. Você também pode controlar quais partes de seus repositórios são para leitura pública e quais partes não são.

Se e quando você configurá-lo e se o seu site for público, certifique-se de informar ao servidor da Web para não exibir conteúdo nas pastas .svn.

    
por 14.12.2010 / 20:56
4

Para desativar todos os commits, adicione um script de gancho pré-commit com a seguinte aparência:

#!/bin/sh

echo "Read-only SVN; no commits allowed!" 1>&2
exit 1

Ou se você quiser fazer apenas um caminho de leitura (como um ramo ou algo assim), tente:

#!/bin/bash

REPOS="$1"
TXN="$2"

if svnlook changed $REPOS -t $TXN |grep -q "mybranch/" ; then
    echo "Read-only branch mybranch/; no commits allowed! " 1>&2
    exit 1
fi

exit 0

Você pode, é claro, fazer quaisquer outras verificações que desejar na declaração if .

    
por 13.12.2010 / 22:02
1

Adicione um script de gancho pré-commit que verifique se os possíveis commits mudaram de caminho e rejeite os commits que se comprometem com a ramificação especificada, a menos que eles venham de qualquer usuário autorizado a fazer as ramificações em questão.

Você também pode fazer isso a partir das permissões de repositório do lado do servidor, e a forma como você as executa varia dependendo de como você expõe o repositório.

    
por 13.12.2010 / 18:29