Usando PHP, Perl ou Python (de preferência PHP), preciso consultar um banco de dados SVN e descobrir o último número de revisão enviado ao SVN. Eu não preciso de nada além disso. Ele precisa ser não intensivo (então eu faço isso a cada 5 minutos como um cron job; o desempenho do SVN não deve ser afetado).
O SVN está localizado na minha intranet, mas não no meu computador específico.
Tenho o SVN instalado, mas não há ligações instaladas para PHP / Perl / Python. Estou executando o Windows XP, mas prefiro uma solução independente de plataforma que também funcione no Linux. Se você tiver uma solução apenas para Linux (ou apenas XP), isso também seria útil.
$ svn info --show-item revision
svn: invalid option: --show-item
Usando Apache Subversion 1.8.16 (r1740329) compilado em 26 de abril de 2016. Também experimentado com CollabNet 1.6.11 (r934486) compilado em 6 de março de 2014.svn help info
as opções legais parasvn info
--show-item
está disponívelRespostas:
Você pode obter a saída em XML assim:
Se houver um erro, a saída será direcionada para stderr. Para capturar stderr em sua saída, use da seguinte maneira:
fonte
svn info $url 2>&1
;svn info $url | grep 'Last Changed Rev' | awk '{ print $4; }'
svn info --show-item revision $url
ousvn info --show-item last-changed-revision $url
.Se você deseja analisar uma cópia de trabalho local, a melhor ferramenta é
svnversion
, que vem com o Subversion e produz saída semelhante968:1000M
. A documentação diz:fonte
Isso lhe dará o número da revisão mais recente no cabeçalho do seu repositório.
Existem alguns posts interessantes sobre a integração de números de subversão em seu script de construção:
fonte
svn info -r HEAD
Isso deve funcionar no Bash, de um diretório de trabalho. Eu usei no Windows com unixutils instalado:
fonte
svn info | grep Revision | cut -d " " -f 2
, retornará a segunda string após ser dividida com espaços.O seguinte deve funcionar:
Ele retorna um único número de revisão.
fonte
Para realmente obter o número da revisão mais recente ("revisão principal") em seu repositório remoto , use isto:
Saídas, por exemplo:
fonte
Uma nota sobre como obter o número da revisão mais recente:
Digamos que eu
cd
modifiquei em um subdiretório revisado (MyProjectDir
). Então, se eu ligarsvnversion
:... Recebo "
323:340
", que acho que significa: " você tem itens aqui, variando da revisão 323 a 340 ".Então, se eu ligar
svn info
:... Recebo "
323
" como revisão - que na verdade é a revisão mais baixa daquelas relatadas porsvnversion
!Podemos então usar
svn info
no modo recursivo para obter mais informações do diretório local:... (remova o
grep
para ver mais detalhes).Finalmente, o que fazer quando queremos verificar qual é a última revisão do repositório online (neste caso, @
server.com
)? Em seguida, emitimos novamentesvn info
, mas com-r HEAD
(observe a diferença entre a-R
opção de maiúsculas anteriormente e as minúsculas-r
agora):O interessante é -
svn info
ainda se refere ao subdiretório atual (MyProjectDir
), no entanto, o caminho online é relatado comoMyProjectDir
(em oposição ao.
caso local) - e a revisão online relatada é a mais alta (340
- em oposição à mais baixa,323
relatada localmente).fonte
A partir do Subversion 1.9, você pode usar a opção --show-item para obter o valor de um dos campos de
svn info
saída do comando. Este comando exibirá apenas o número da revisão:Obtenha a saída XMLed de svn info usando a
--xml
opção e use o PowerShell para obter o número de revisão. Aqui está um exemplo simples:Usando o VisualSVN Server 3.4 ou mais recente, você pode obter o número de revisões em um repositório executando estes comandos:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Consulte a
Get-SvnRepository
referência de cmdlet do PowerShell para obter mais informações.fonte
Eu acho que você está procurando
Você pode cumprir esse comando?
Provavelmente, você também precisará fornecer credenciais de login com o repositório.
fonte
Alguém me adiantou para postar a resposta sobre
svnversion
, que é definitivamente a melhor solução se você tiver uma cópia de trabalho (IIRC, não funciona com URLs). Vou acrescentar o seguinte: se você está no servidor que hospeda o SVN, a melhor maneira é usar osvnlook
comando. Este é o comando que você usa ao escrever um script de gancho para inspecionar o repositório (e até mesmo a transação atual, no caso de ganchos de pré-confirmação). Você pode digitarsvnlook help
para obter detalhes. Você provavelmente deseja usar osvnlook youngest
comando. Observe que ele requer acesso direto ao diretório repo, portanto, deve ser usado no servidor.fonte
Ou
Ou
fonte
Você pode usar qualquer um dos comandos:
fonte
Se você quiser um realmente curto:
A notação circunflexa é uma abreviação para "a URL do diretório raiz do repositório".
fonte
Se você tiver a infelicidade de precisar fazer isso a partir de um arquivo em lote do Windows, aqui está o encantamento que você está procurando:
Isso executa "svn info", iterando em cada linha de saída gerada. Ele usa dois pontos como delimitador entre o primeiro e o segundo token na linha. Quando o primeiro token é "Revisão", ele define a variável de ambiente REV como o segundo token.
fonte
FOR /F "tokens=2" %%i IN ('svn info ^| FINDSTR Revision:') DO SET revision=%%i
Você está procurando uma chamada semelhante à chamada da linha de comando
Parece que isso é possível usando a biblioteca pysvn, e há uma receita que deve ajudá-lo a começar. Não tenho certeza se há algo semelhante para PHP.
Se você precisar recorrer à chamada do binário SVN por conta própria, certifique-se de usar o
--xml
parâmetro para obter o resultado como XML. Isso deve ser mais fácil de analisar do que a saída da linha de comando.fonte
subprocess.check_output
em python para evitar outra chamada de biblioteca. Se você está apenas verificando os números de revisão / retirando as últimas cópias, é mais simples usar o svn na linha de comando viasubprocess
. Agora, se você estiver fazendo check-ins automáticos e mesclagens ...Você pode usar o formato XML out, por exemplo:
Exemplo: usando o número de revisão
fonte
Você pode tentar o comando abaixo:
fonte
Só
svn info
no BASH te darei todos os detalhesVocê obterá a REVISÃO deste
fonte
A maneira mais simples e limpa de fazer isso (na verdade, svn 1.9, lançado em 2015) é usando:
A saída é o número da última revisão (mais jovem) para o SVNURL, ou o número da revisão atual da cópia de trabalho do SVNPATH. O
--no-newline
é opcional, instrui asvn
não emitir uma nova linha cosmética (\n
) após o valor, se você precisar de saída mínima (apenas o número da revisão).Veja: https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item
fonte
svn info --show-item
, em vez de--show item
As soluções postadas não resolvem o caso quando externos estão sendo usados.
Se eu tiver uma URL ou uma cópia de trabalho com a
svn:externals
propriedade definida, os externos podem mudar e, portanto, a última revisão do servidor subversion mudará. Mas a última revisão da cópia de trabalho ou URL somente relatará o número da revisão quando a propriedade svn: externals foi alterada ou qualquer item abaixo no caminho da URL, o que é o comportamento esperado.Então você obtém o
svn:externals
propriedade e itera sobre os URLs e escolhe a revisão das alturas ou consulta a URL base do servidor subversion. A versão relatada a partir do URL base conterá a revisão mais recente de TUDO no servidor.Portanto, se você estiver usando externos, é melhor usar
svn info BASE_URL
ondeBASE_URL
está a URL raiz para todos os caminhos no servidor subversion.fonte
Isso obterá apenas o número de revisão da última revisão alterada:
Eu espero que isso ajude.
fonte
$ svn log | head -10
em qualquer diretório que tenha uma.svn
pastafonte
svn info
ousvnversion
não levará em consideração os subdiretórios, para encontrar a última 'revisão' da base de código ao vivo que a forma hackeada abaixo funcionou para mim - pode demorar um pouco para executar:fonte
Isso pode ser obtido usando a biblioteca "SVN" :
O head_revision deve conter o número de revisão mais recente do arquivo
fonte
Parece que há uma entrada no FAQ oficial para isso . O código-fonte está em C, mas o mesmo princípio se aplica, conforme descrito aqui nesta postagem da lista de discussão .
fonte
Atualização: Subversion 1.9 irá suportar um novo comando "svn youngest" que exibe apenas o número da última revisão. A diferença para "svnlook youngest" é que "svn youngest" também funciona remotamente.
http://subversion.tigris.org/issues/show_bug.cgi?id=4299
fonte