Obtenha a tag mais recente do Subversion

5

Existe uma maneira de determinar a mais nova tag na subversão?

Para um aplicativo que eu implantei, o cliente precisa ter outro servidor que possa acessar, caso o servidor ativo fique inativo. Já existe um sistema automatizado para copiar o banco de dados para o servidor de backup. O código do aplicativo está em um repositório do subversion e eu gostaria de escrever um script que copie o código do subversion para o servidor de backup automaticamente. Eu tenho um script que faz isso, no entanto, preciso informar manualmente qual tag recuperar. Existe uma maneira de fazer isso totalmente automatizado.

O servidor está executando o Redhat.

    
por Brian Fisher 23.09.2009 / 20:45

7 respostas

4

Se suas tags forem listadas sequencialmente quando classificadas, você pode pegar o nome da última com algo como:

svn ls .../path/to/repo/tags | tail -n 1

Se a estrutura de tags do seu projeto não for tão rígida, o resultado de svn ls precisará ser passado na opção -v (verbose) e classificado com base na data da saída.

    
por 23.09.2009 / 21:48
6

Este comando shell gera a tag criada mais recentemente no diretório tags .

svn log -v --limit 1 tagsURL | awk '/^   A/ { print $2 }'

Se você está chamando o comando de dentro de um repositório com check-out, você pode usar o caminho relativo do caminho svn ^ :

svn log -v --limit 1 ^/tags | awk '/^   A/ { print $2 }'
    
por 23.09.2009 / 21:54
3

Meu entendimento é que as tags são apenas cópias da ramificação principal que você fez com o comando 'svn copy'. Então, se você está fazendo isso, você não está dando números de versão dessas tags? Basta pegar o maior número?

Talvez você esteja falando do número de revisão mais recente de um repo? Nesse caso, seria apenas algo como:

svn info https://www.myDomain.com/svn/myRepo | grep Revision | awk '{print $2}'

Ou talvez você queira:

svn ls https://www.myDomain.com/svn/myRepo/tags

Você poderia então fazer uma informação svn em cada um desses diretórios, e aquele com o maior número de Last changed Revision seria a tag mais recente.

    
por 23.09.2009 / 21:38
1
 svn list --xml $REPO/tags | grep 'revision="' | cut -d '"' -f2 | tr -d ' ' | sort -bnu | tail -1
    
por 08.11.2011 / 00:04
1

Se as suas tags não ordenarem 'naturalmente' (se você seguir o versionamento semântico, 1.10.0 será listado após 1.1.0 não depois de 1.9.0 em svn ls output), você pode usar o método garantido para classificar o ID da revisão do diretório de tags:

 svn ls -v --config-dir=/root/.subversion https://svn/project/tags | sort -n |  awk '{ field = $NF }; END{ print field }'
 1.10.0
    
por 20.02.2012 / 06:51
0

Se você tiver bons números de versão

svn ls https://www.myDomain.com/svn/myRepo | sort -V | tail -n 1
    
por 05.02.2010 / 16:51
0

Eu gosto da solução de Jim Huang, funciona como um encanto. Se você receber o erro "Broken Pipe" (eu entendi no Ubuntu e Mac), apenas tente cercar o comando como o seguinte:

exec 6>&2 2>/dev/null; svn log -v tagsURL | awk '/^   A/ { print $2 }' | head -1;  exec 2>&6 6>&-

Isso simplesmente suprimirá a mensagem de erro. Eu verifiquei algumas listas de discussão e, obviamente, ninguém sabe por que esse erro ocorre.

    
por 09.03.2011 / 15:48

Tags