Pergunta

Nós usamos svn: externals para revisões específicas de uma biblioteca, por exemplo, como

xyzlib -r12345 https://asdf.asdf.local/xyzlib/trunk/

Quando você faz uma modificação em sua cópia de trabalho para tal um check-out externo, é possível cometer embora os links externos para uma revisão específica e não a cabeça.

Quando você executa svn update após a confirmação, as alterações serão ido na cópia de trabalho, porque reverte subversão tudo de volta para a revisão 12345. Então, você nunca realmente ver as mudanças si mesmo, mas eles ainda estão na cabeça, o que é ruim.

É possível proibir commits somente quando o externo não aponta para a revisão HEAD?

Foi útil?

Solução

Para estes tipos de validações Eu recomendaria também um gancho pre-commit, mas em vez de escrever um script que pode facilmente tornar-se impossível entender Eu recomendo usar uma biblioteca como SVNKit - http://svnkit.com/ (se você sabe Java).

Eu escrevi alguns pré-commit ganchos me usar esta biblioteca e é muito fácil de trabalhar. Você escreve um pequeno programa Java executável que é chamado a partir do gancho pre-commit pelo Subversion. Então é fácil de extrair por exemplo propriedades ou partes do URL para fazer a validação e rejeitar a cometer se ele não se aplica a suas "regras".

Dê uma olhada nas aulas SVNLookClient e SVNChangeEntry - (. Por exemplo, extração de informações sobre uma consolidação em andamento) têm métodos para a maioria dos casos comuns

Outras dicas

Você poderia tentar algo como isto: usar um pré-compromisso roteiro para verificar se o cometer está indo para uma tag. Se assim for, em seguida, deixar para fora e fornecer uma mensagem. ler um pouco mais sobre ganchos de subversão. Você vai ter que re escrever a regex para que ele não fora se não for CABEÇA ao invés de falhar se é uma tag.

$SVNLOOK changed -t “$TXN” “$REPOS” | egrep -v “^[AD][[:space:]]+(.*/)?tags/[^/]+/$” | egrep “^[^[:space:]]+[[:space:]]+tags/[^/]+/.+”
if [ $? -eq 0 ] ; then
echo >&2 “***************************************”
echo >&2 “* Modification of tags is not allowed *”
echo >&2 “***************************************”
exit 1
fi

Uma vez que você estiver usando https, eu suponho que você está usando mod_dav_svn. Você poderia configurar uma url adicional para o seu repositório de biblioteca, e só conceder acesso somente leitura para ele. Dessa forma, até mesmo os desenvolvedores que normalmente podem comprometer-se a biblioteca, não será capaz de cometer através do svn:. Externa

Se o seu não empenhada em manter o externo definido como uma revisão do tronco, porque não basta fazer uma nova tag com base nessa revisão. Você pode então ter seu svn:. Ponto externo para a marca, e utilizar um dos métodos de controle de acesso documentados para commits limite para o seu diretório tag (ou colocar a tag em um repo diferente e fazer que repo somente leitura)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top