2010-05-20 3 views
29

Ich Anpassen git log alle in 1 Zeile sein. Genauer gesagt, habe ich folgendes Alias:Wie kann ich die SVN-Revisionsnummer in git log?

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

Also, wenn ich git lg laufen, sehe ich folgendes:

* 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) 

Allerdings möchte ich auch dort die SVN-Revisionsnummer hinzuzufügen, so dass es sieht ungefähr so ​​aus:

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

die normale git log Sie Revisionsnummer der SVN zeigt, so bin ich sicher, dass dies möglich sein muss. Wie mache ich das?

Antwort

9

Wenn Sie sagen, dass "die normale git log zeigt Ihnen die SVN-Revisionsnummer", ich Sie erraten bedeuten, dass Sie mit einem Repository von git svn, die standardmäßig behandelt werden, handeln eine Zeile wie diese am Ende der synchronisierten c fügt ommits:

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

nun so weit wie git betrifft, so ist dies nur ein zufälliger Text, so bezweifle ich, dass Sie einen % Accessor finden die ###### Revisionsnummer von dort zu lesen.

An diesem Punkt wäre Ihre beste Option, nur die Ausgabe von Plain git log selbst zu analysieren. Hier ist eine grobe Ausgangspunkt:

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

Die Lösung von VonC ist viel einfacher –

29

Betrachten Sie den Befehl git svn

  • es hat eine ähnliche Protokollfunktion als git log: git svn log
  • es hat die find-rev Option (eingeführt in git 1.6.0)
  • (die SVN-Revision von einem SHA1-Schlüssel abzurufen)

ich bin nicht sicher, Sie obwohl diese beiden Optionen in einer Befehlszeile kombiniert werden.
Ein Skript (ein bisschen wie this one, die nicht genau das, was Sie wollen, aber immer noch eine Vorstellung geben kann) könnte in Ordnung sein.


sdaau fügt in the comments:

Ein Beispiel hierfür:

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

Ein Beispiel dafür: 'git svn find-rev $ (git log - max-Anzahl 1 --pretty = Format:% H)' – sdaau

+0

@sdaau Danke. Ich habe Ihr Beispiel in die Antwort für mehr Sichtbarkeit aufgenommen. – VonC

+0

Diese Links zu den Mailinglisten sind kaputt. Könnten Sie sie durch einen geeigneteren Link ersetzen? Z.B. das Webarchiv http://web.archive.org/web/20070615164322/http://lists-archives.org/git/423371-git-svn-add-find-rev-command.html –

8

endete mit etwas wie folgt aus:

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

, dass die letzte Revision aus diesem Repo gibt (Sie git svn log Parameter für die eine weitere Revision zwicken können, aber halten --oneline und -1), aber mit einem nachfolgenden Leerzeichen (so etwas wie "r9441 "), dass ich denke, sollen Streifen aus leicht sein.

Hoffe es hilft ...

13

Run:

git rev-parse HEAD 

, die Sie Hash-git commit gibt.

Dann nutzen Sie diese verpflichten Hash auszuführen:

git svn find-rev <commit_hash> 

Welche Sie Revision gibt svn.

+0

Funktioniert perfekt. Vielen Dank! – Mhmmd

+0

Ich mag diese Antwort am besten, weil sie am direktesten erscheint. Hier ist mein Beispiel für eine einzeilige Version: '' echo "r $ (git svn find-rev $ (git rev-parse HEAD))" '' '. Das funktioniert natürlich als Alias: '' 'rev =! Echo" r $ (git svn find-rev $ (git rev-parse HEAD)) "' '' – hangtwenty

+0

Ich mag diese Antwort am besten, weil sie am direktesten erscheint. Hier ist mein Beispiel für eine einzeilige Version: '' echo "r $ (git svn find-rev $ (git rev-parse HEAD))" '' '. Dies funktioniert natürlich wie ein Alias: '' 'svnrev =! Echo" r $ (git svn find-rev $ (git rev-parse HEAD)) "' ''. Dies macht es auch so, dass Sie Svn Export noch besser nachahmen können '' 'export =! Git Archiv --format zip --output/tmp/$ (git svnrev) Meister' '' – hangtwenty