2010-05-20 7 views
29

Je suis en train de personnaliser mon journal git pour qu'il soit tout en 1 ligne. Plus précisément, j'ai ajouté l'alias suivant:Comment afficher le numéro de révision SVN dans git log?

lg = log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%an%Creset - %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative 

Alors, quand je lance git lg, je vois ce qui suit:

* 41a49ad - zain - commit 1 message here (3 hours ago) 
* 6087812 - zain - commit 2 message here (5 hours ago) 
* 74842dd - zain - commit 3 message here (6 hours ago) 

Cependant, je veux ajouter le numéro de révision SVN là aussi, il ressemble à quelque chose comme:

* 41a49ad - r1593 - zain - commit 1 message here (3 hours ago) 

le git log normal, vous indique le numéro de révision SVN, donc je suis sûr que cela doit être possible. Comment puis-je faire cela?

Répondre

9

Quand vous dites que "la git log normale vous montre le numéro de révision SVN", je suppose que vous signifie que vous traitez avec un référentiel géré par git svn, qui ajoute par défaut une ligne comme celle-ci à la fin du c synchronisé ommits:

git-svn-id: svn://path/to/[email protected]###### <domain> 

Maintenant, en ce qui concerne git, c'est juste texte aléatoire, donc je doute que vous pouvez trouver un % accesseur pour lire le numéro de révision ###### à partir de là.

À ce stade, votre meilleure option serait de simplement analyser la sortie de plain git log par vous-même. Voici un point de départ brut:

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: svn:[^@]*@\([0-9]*\) .*/\1 r\2/' 
+1

La solution de VonC est beaucoup plus simple –

29

Tenir compte de la commande git svn

  • il a une fonction de journal semblable que git log: git svn log
  • il a la (introduite dans git 1.6.0)
  • l'option find-rev (pour récupérer la révision SVN à partir d'une clé SHA1)

Je ne suis pas sûr de pouvoir combiner ces deux options dans une seule ligne de commande.
Un script (un peu comme this one qui n'est pas exactement ce que vous voulez mais qui peut encore donner une idée) pourrait être en ordre.


sdaau ajoute in the comments:

Un exemple:

git svn find-rev $(git log --max-count 1 --pretty=format:%H) 
+2

Un exemple de ceci: 'git svn find-rév $ (git log --max-count 1 --pretty = format:% H)' – sdaau

+0

@sdaau Merci. J'ai inclus votre exemple dans la réponse pour plus de visibilité. – VonC

+0

Ces liens vers les listes de diffusion sont cassés. Pourriez-vous les remplacer par un lien plus approprié? Par exemple. l'archive web http://web.archive.org/web/20070615164322/http://lists-archives.org/git/423371-git-svn-add-find-rev-command.html –

8

Nous avons fini avec quelque chose comme ceci:

git svn log --oneline -1 | cut -d '|' -f1 

qui donne la dernière révision de cette prise en pension (vous pouvez modifier git svn log paramètres pour montrer une autre révision, mais gardez --oneline et -1), mais avec un espace de fin (quelque chose comme "r9441 ") que je pense devrait être facile à enlever.

Espérons que ça aide ...

13

Run:

git rev-parse HEAD 

qui vous donne git commit hachage.

Ensuite, utilisez ce commit hachage à exécuter:

git svn find-rev <commit_hash> 

qui vous donne svn révision.

+0

Fonctionne parfaitement. Merci! – Mhmmd

+0

J'aime mieux cette réponse, car elle me semble la plus directe. Voici ma version sur une ligne: '' 'echo" r $ (git svn find-rev $ (git rev-parse HEAD)) "' '' '. Cela fonctionne comme un alias bien sûr: '' 'rev =! Echo" r $ (git svn find-rev $ (git rev-parse HEAD)) "' '' – hangtwenty

+0

J'aime mieux cette réponse, car elle semble la plus directe. Voici ma version sur une ligne: '' 'echo" r $ (git svn find-rev $ (git rev-parse HEAD)) "' '' '. Cela fonctionne comme un alias bien sûr: '' 'svnrev =! Echo" r $ (git svn find-rev $ (git rev-parse HEAD)) "' '' '. Cela rend également si vous pouvez imiter l'exportation svn encore mieux '' 'exporter =! Archive git - format zip - sortie/tmp/$ (git svnrev) master''' – hangtwenty

Questions connexes