En utilisant PHP, Perl ou Python (de préférence PHP), j'ai besoin d'un moyen d'interroger une base de données SVN et de trouver le dernier numéro de révision envoyé à SVN. Je n'ai besoin de rien d'autre que ça. Il doit être non intensif (donc je le fais toutes les 5 minutes en tant que tâche cron; les performances de SVN ne devraient pas être affectées).
SVN se trouve sur mon intranet, mais pas sur mon ordinateur spécifique.
J'ai SVN installé, mais aucune liaison n'est installée pour PHP / Perl / Python. J'utilise Windows XP, mais je préférerais une solution indépendante de la plate-forme qui peut également fonctionner sous Linux. Si vous avez une solution Linux uniquement (ou XP uniquement), cela serait également utile.
$ svn info --show-item revision
svn: invalid option: --show-item
Utilisation d'Apache Subversion 1.8.16 (r1740329) compilé le 26 avril 2016. Également essayé avec CollabNet 1.6.11 (r934486) compilé le 6 mars 2014.svn help info
les options juridiques poursvn info
--show-item
est disponibleRéponses:
Vous pouvez obtenir la sortie en XML comme ceci:
S'il y a une erreur, la sortie sera dirigée vers stderr. Pour capturer stderr dans votre sortie, utilisez ainsi:
la source
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
.Si vous souhaitez analyser une copie de travail locale, le meilleur outil est
svnversion
, qui est fourni avec Subversion et produit une sortie comme968:1000M
. La documentation dit:la source
Cela vous donnera le dernier numéro de révision en tête de votre référentiel.
Il y a quelques bons articles de blog sur l'intégration des numéros de subversion dans votre script de construction:
la source
svn info -r HEAD
Cela devrait fonctionner dans Bash, à partir d'un répertoire de travail. Je l'ai utilisé dans Windows avec unixutils installé:
la source
svn info | grep Revision | cut -d " " -f 2
retournera la deuxième chaîne après avoir été fractionnée à l'aide d'espaces.Les éléments suivants devraient fonctionner:
Il renvoie un seul numéro de révision.
la source
Pour vraiment obtenir le dernier numéro de révision ("head revision") sur votre référentiel distant , utilisez ceci:
Sorties par exemple:
la source
Une note sur l'obtention du dernier numéro de révision:
Disons que j'ai
cd
-ed dans un sous-répertoire révisé (MyProjectDir
). Ensuite, si j'appellesvnversion
:... J'obtiens "
323:340
", ce qui signifie, je suppose: " vous avez des éléments ici, allant de la révision 323 à 340 ".Ensuite, si j'appelle
svn info
:... J'obtiens "
323
" comme révision - qui est en fait la révision la plus basse de celles rapportées parsvnversion
!On peut ensuite utiliser
svn info
en mode récursif pour obtenir plus d'informations depuis le répertoire local:... (supprimez le
grep
pour voir plus de détails).Enfin, que faire lorsque nous voulons vérifier quelle est la dernière révision du référentiel en ligne (dans ce cas, @
server.com
)? Ensuite, nous émettons à nouveausvn info
, mais avec-r HEAD
(notez la différence entre l'-R
option de capital précédemment et les minuscules-r
maintenant):La chose intéressante est -
svn info
fait toujours référence au sous-répertoire actuel (MyProjectDir
), cependant, le chemin en ligne est signalé commeMyProjectDir
(par opposition au.
cas local) - et la révision en ligne rapportée est la plus élevée (340
- par opposition à la plus basse,323
rapportée localement).la source
À partir de Subversion 1.9, vous pouvez utiliser l'option --show-item pour obtenir une valeur de l'un des champs de
svn info
sortie de la commande. Cette commande affichera uniquement le numéro de révision:Obtenez la sortie XML des informations svn à l'aide de l'
--xml
option et utilisez PowerShell pour obtenir le numéro de révision. Voici un exemple simple:À l'aide de VisualSVN Server 3.4 ou plus récent, vous pouvez obtenir le nombre de révisions dans un référentiel en exécutant ces commandes:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
Voir
Get-SvnRepository
PowerShell cmdlet référence pour plus d' informations.la source
Je pense que vous cherchez
Pouvez-vous exécuter cette commande?
Vous devrez probablement également fournir des informations de connexion avec le référentiel.
la source
Quelqu'un d'autre m'a battu pour poster la réponse à propos de
svnversion
, ce qui est certainement la meilleure solution si vous avez une copie de travail (IIRC, cela ne fonctionne pas avec les URL). J'ajouterai ceci: si vous êtes sur le serveur hébergeant SVN, le meilleur moyen est d'utiliser lasvnlook
commande. C'est la commande que vous utilisez lors de l'écriture d'un script hook pour inspecter le référentiel (et même la transaction en cours, dans le cas des hooks pré-commit). Vous pouvez tapersvnlook help
pour plus de détails. Vous souhaitez probablement utiliser lasvnlook youngest
commande. Notez qu'il nécessite un accès direct au répertoire du référentiel, il doit donc être utilisé sur le serveur.la source
Ou
Ou
la source
Vous pouvez utiliser l'une ou l'autre des commandes:
la source
Si vous en voulez un très court:
La notation caret est un raccourci pour «l'URL du répertoire racine du référentiel».
la source
Si vous avez le malheur de devoir le faire à partir d'un fichier batch Windows, voici l'incantation que vous recherchez:
Cela lance "svn info", itérant à travers chaque ligne de sortie générée. Il utilise un deux-points comme délimiteur entre le premier et le deuxième jeton sur la ligne. Lorsque le premier jeton est "Révision", il définit la variable d'environnement REV sur le deuxième jeton.
la source
FOR /F "tokens=2" %%i IN ('svn info ^| FINDSTR Revision:') DO SET revision=%%i
Vous recherchez un appel similaire à l'appel en ligne de commande
Il semble que cela soit possible en utilisant la bibliothèque pysvn, et il existe une recette qui devrait vous aider à démarrer. Je ne sais pas s'il existe quelque chose de similaire pour PHP.
Si vous avez besoin d'appeler vous-même le binaire SVN, assurez-vous d'utiliser le
--xml
paramètre pour obtenir le résultat au format XML. Cela devrait être plus facile à analyser que la sortie de la ligne de commande.la source
subprocess.check_output
en python pour éviter encore un autre appel de bibliothèque. Si vous ne faites que vérifier les numéros de révision / extraire les dernières copies, il est plus simple d'utiliser simplement svn depuis la ligne de commande viasubprocess
. Maintenant, si vous effectuez des enregistrements et des fusions automatiques ...Vous pouvez utiliser le format de sortie XML, par exemple:
Exemple: utilisation du numéro de révision
la source
Vous pouvez essayer la commande ci-dessous:
la source
Just
svn info
in BASH vous donnera tous les détailsVous obtiendrez la RÉVISION de ce
la source
Le moyen le plus simple et le plus propre de le faire (en fait svn 1.9, sorti en 2015) consiste à utiliser:
La sortie est le numéro de la dernière révision (joungest) pour le SVNURL, ou le numéro de la révision actuelle de la copie de travail de SVNPATH. Le
--no-newline
est facultatif, indique desvn
ne pas émettre de nouvelle ligne cosmétique (\n
) après la valeur, si vous avez besoin d'une sortie minimale (uniquement le numéro de révision).Voir: https://subversion.apache.org/docs/release-notes/1.9.html#svn-info-item
la source
svn info --show-item
, au lieu de--show item
Les solutions publiées ne gèrent pas le cas lorsque des externes sont utilisés.
Si j'ai une URL ou une copie de travail avec l'
svn:externals
ensemble de propriétés, les externes peuvent changer et donc la dernière révision du serveur subversion changera. Mais la dernière révision de la copie de travail ou de l'URL ne rapportera le numéro de révision que lorsque la propriété svn: externals a été modifiée ou tout élément situé plus bas dans le chemin de l'URL, ce qui est le comportement attendu.Vous obtenez donc la
svn:externals
propriété et parcourez les URL et choisissez la révision des hauteurs ou interrogez l'URL de base sur le serveur de subversion. La version signalée à partir de l'URL de base contiendra la dernière révision pour TOUT sur le serveur.Donc, si vous utilisez des externes, il est préférable d'utiliser
svn info BASE_URL
oùBASE_URL
est l'URL racine de tous les chemins sur le serveur subversion.la source
Cela n'obtiendra que le numéro de révision de la dernière révision modifiée:
J'espère que ça aide.
la source
$ svn log | head -10
sur n'importe quel répertoire contenant un.svn
dossierla source
svn info
ousvnversion
ne prendra pas en considération les sous-répertoires, pour trouver la dernière `` révision '' de la base de code en direct de la manière piratée ci-dessous a fonctionné pour moi - cela peut prendre un certain temps à s'exécuter:la source
Ceci peut être obtenu en utilisant la bibliothèque "SVN" :
Le head_revision doit contenir le dernier numéro de révision du fichier
la source
On dirait qu'il y a une entrée dans la FAQ officielle à ce sujet . Le code source est en C mais le même principe s'applique, comme indiqué ici dans cet article de liste de diffusion .
la source
Mise à jour: Subversion 1.9 supportera une nouvelle commande "svn youngest" qui ne sortira que le dernier numéro de révision. La différence avec «svnlook youngest» est que «svn youngest» fonctionne également à distance.
http://subversion.tigris.org/issues/show_bug.cgi?id=4299
la source