Source

hgtip-content / beginner / 2009-10-03-stay-sane-with-graphlog.html

Full commit
{% extends "_tip.html" %}
{%hyde
    title: Behalten Sie ihren Verstand bei Graphlog
    author_name: Steve Losh
    author_link: http://stevelosh.com/
    created: 2009-10-03
%}


{% block excerpt %}
Die Verwendung von `hg log` funktioniert grossartig bis Sie mehrere Aste verwenden.
Ab da verliert man die Orientierung. Aber Graphlog kann Sie retten.
{% endblock %}


{% block tip %}

Einer der ersten Befehle von Mercurial die Sie lernen ist `hg log`. Es zeigt 
das Protokoll aller Änderungen im Repository an. Hier ist ein Beispiel wie die
Ausgabe aussehen kann:

    $ hg log
    changeset:   2:7b393734ccf7
    tag:         tip
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:42:13 2009 -0400
    summary:     Do some more work.
    
    changeset:   1:26ac605206b4
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:42:08 2009 -0400
    summary:     Do some work.
    
    changeset:   0:ef4afb3d9699
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:42:00 2009 -0400
    summary:     Initial commit.
    
    $

Gar nicht so schlecht. Es funktioniert gut wenn Sie eine gerade Linie von 
Änderungen ohne Verzweigungen haben. Sobald Sie Verzweigungen benutzen, wird 
es sehr hart dem Verlauf zu folgen. Ein weiterer Blick auf die Ausgabe nach 
dem einchecken einigen weiterer Änderungen:

    $ hg log
    changeset:   8:b58f37a6f0af
    tag:         tip
    parent:      3:fee36cf81486
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:48:55 2009 -0400
    summary:     Oh god the server is on fire fix it now.
    
    changeset:   7:8f54b4d0d885
    parent:      5:ce29b9e5288f
    parent:      6:1dff6084cda4
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:48:20 2009 -0400
    summary:     Go back to the old wording.
    
    changeset:   6:1dff6084cda4
    parent:      4:3c52ba0b77af
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:47:23 2009 -0400
    summary:     Actually, the wording was fine.
    
    changeset:   5:ce29b9e5288f
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:46:21 2009 -0400
    summary:     Add some content.
    
    changeset:   4:3c52ba0b77af
    parent:      2:7b393734ccf7
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:46:04 2009 -0400
    summary:     Change some wording around.
    
    changeset:   3:fee36cf81486
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:45:50 2009 -0400
    summary:     Fix a horrific bug.
    
    changeset:   2:7b393734ccf7
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:42:13 2009 -0400
    summary:     Do some more work.
    
    changeset:   1:26ac605206b4
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:42:08 2009 -0400
    summary:     Do some work.
    
    changeset:   0:ef4afb3d9699
    user:        Steve Losh <steve@stevelosh.com>
    date:        Fri Oct 02 23:42:00 2009 -0400
    summary:     Initial commit.
    
    $

Nun ist es nicht mehr so einfach zu sehen was vor sich geht. Es gibt mindestens
einen Merge (ChangeSet `7` hat 2 Eltern), somit muss es irgendwo eine 
Verzweigung geben. Können Sie diese erkennen oder macht Sie die Suche danach
verrückt?

Um das Protokoll verstÄndlicher zu machen, können Sie die [graphlog 
Erweiterung][glog] durch das [bearbeiten der `~/.hgrc` Datei] aktivieren:

    [extensions]
    graphlog = 

[glog]: http://mercurial.selenic.com/wiki/GraphlogExtension
[hgrc]: {{ links.tip_edit_hgrc }}

Nun können Sie mit `hg glog` eine ASCII-Grafik des Protokolls anzeigen lassen:

    $ hg glog
    @  changeset:   8:b58f37a6f0af
    |  tag:         tip
    |  parent:      3:fee36cf81486
    |  user:        Steve Losh <steve@stevelosh.com>
    |  date:        Fri Oct 02 23:48:55 2009 -0400
    |  summary:     Oh god the server is on fire fix it now.
    |
    | o    changeset:   7:8f54b4d0d885
    | |\   parent:      5:ce29b9e5288f
    | | |  parent:      6:1dff6084cda4
    | | |  user:        Steve Losh <steve@stevelosh.com>
    | | |  date:        Fri Oct 02 23:48:20 2009 -0400
    | | |  summary:     Go back to the old wording.
    | | |
    | | o  changeset:   6:1dff6084cda4
    | | |  parent:      4:3c52ba0b77af
    | | |  user:        Steve Losh <steve@stevelosh.com>
    | | |  date:        Fri Oct 02 23:47:23 2009 -0400
    | | |  summary:     Actually, the wording was fine.
    | | |
    | o |  changeset:   5:ce29b9e5288f
    | |/   user:        Steve Losh <steve@stevelosh.com>
    | |    date:        Fri Oct 02 23:46:21 2009 -0400
    | |    summary:     Add some content.
    | |
    | o  changeset:   4:3c52ba0b77af
    | |  parent:      2:7b393734ccf7
    | |  user:        Steve Losh <steve@stevelosh.com>
    | |  date:        Fri Oct 02 23:46:04 2009 -0400
    | |  summary:     Change some wording around.
    | |
    o |  changeset:   3:fee36cf81486
    |/   user:        Steve Losh <steve@stevelosh.com>
    |    date:        Fri Oct 02 23:45:50 2009 -0400
    |    summary:     Fix a horrific bug.
    |
    o  changeset:   2:7b393734ccf7
    |  user:        Steve Losh <steve@stevelosh.com>
    |  date:        Fri Oct 02 23:42:13 2009 -0400
    |  summary:     Do some more work.
    |
    o  changeset:   1:26ac605206b4
    |  user:        Steve Losh <steve@stevelosh.com>
    |  date:        Fri Oct 02 23:42:08 2009 -0400
    |  summary:     Do some work.
    |
    o  changeset:   0:ef4afb3d9699
       user:        Steve Losh <steve@stevelosh.com>
       date:        Fri Oct 02 23:42:00 2009 -0400
       summary:     Initial commit.
    
    $

So können Sie ganz einfach erkennen wo die Verzweigung erfolgte.

Ich persönlich mag eine kompaktere Ausgabe von `hg glog`, da ich meistens
nicht alle Informationen benötige. Ich habe meine `~/.hgrc` Datei so angepasst:

    [defaults]
    glog = --template 'changeset:   {rev}:{node|short} {tags}\nsummary:     {desc|firstline|fill68|tabindent|tabindent}\n\n'

Mit dieser Vorlage als Standardeinstellung ergibt `hg glog` bei mir diese 
Ausgabe:

    $ hg glog
    @  changeset:   8:b58f37a6f0af tip 
    |  summary:     Oh god the server is on fire fix it now.
    |
    | o    changeset:   7:8f54b4d0d885  
    | |\   summary:     Go back to the old wording.
    | | |
    | | o  changeset:   6:1dff6084cda4  
    | | |  summary:     Actually, the wording was fine.
    | | |
    | o |  changeset:   5:ce29b9e5288f  
    | |/   summary:     Add some content.
    | |
    | o  changeset:   4:3c52ba0b77af  
    | |  summary:     Change some wording around.
    | |
    o |  changeset:   3:fee36cf81486  
    |/   summary:     Fix a horrific bug.
    |
    o  changeset:   2:7b393734ccf7  
    |  summary:     Do some more work.
    |
    o  changeset:   1:26ac605206b4  
    |  summary:     Do some work.
    |
    o  changeset:   0:ef4afb3d9699  
       summary:     Initial commit.
    
    $

Für mich ist dies viel einfacher zu lesen und gibt mir dennoch alle notwendigen
Informationen die ich benötige. Wenn ich mehr über eine Änderung wissen will, 
verwende ich `hg log -r REV` oder [`hg show REV`][show].

[show]: /tips/beginner/2009-09-29-show-changeset-info/

{% endblock %}