2016-05-10 12 views
3

Wie kann ichWas ist das Mercurial-Äquivalent zu `git log --graph --decorate --oneline --all`?

tun
git log --graph --decorate --oneline --all 

in Mercurial?

  • Ich möchte --graph, so kann ich die Beziehung sehen zwischen
  • verpflichtet Ich möchte --decorate so, dass es die Zweignamen druckt für jeden Tipp und/oder jeder verpflichten, einschließlich der lokalen Fernverfolgung Zweige, die genau zeigen, die Situation auf einer der konfigurierten Fernbedienung (Ich habe zwei Fernbedienungen); es zeigt auch die Specials wie HEAD, die ich als gut
  • Ich möchte --oneline, sehen wollen, so dass ich viele Knoten auf dem Bildschirm
  • ich --all wollen sehen, so dass ich alle Zweige sehen nicht nur die, die ich überprüft out
    • einschließlich Lesezeichen
    • einschließlich der Situation auf den Ferngeräten (im Vergleich zu der Situation vor Ort)

Antwort

3

Es gibt kein direktes Äquivalent (oder, wenn es das gibt, würde ich gerne wissen :-)).

Einiges davon ist einfach, weil einige Dinge nicht in Mercurial gelten, wo ein gegebenes Commit nur für einen Zweig gilt und hg log standardmäßig alle Commits für alle Zweige anzeigt. Ebenso gibt es keine HEAD: Es gibt einen aktuellen Zweig und einen aktuellen Commit, den Sie als Zweig . oder Revision . benennen können. Diese funktionieren wie HEAD, außer dass sie keine anonyme Verzweigung sein können.

Es ist nicht möglich, die Fernbedienung separat anzuzeigen, da keine Remote-Tracking-Zweige vorhanden sind. Entweder haben Sie irgendwelche eingehenden Commits (hg incoming druckt nichts), so wird es bereits in der Protokollausgabe sein, oder Sie nicht (so müssen Sie hg pull, in der Regel ohne -u laufen, um es zu bekommen, , um es zu sehen).

Die aktuelle Commit zeigt in hg log -G (aka hg glog) Ausgabe als @ statt o, also das ist, wie Sie es identifizieren.

Hier ist, was ich (nicht ganz zufriedenstellend, und ich habe immer Topo-Sortierung verpassen):

[alias] 
# lga comes from 
# http://jamie-wong.com/2012/07/11/my-mercurial-setup-and-workflow-at-khan-academy/ 
lga = glog --style ~/.hgstuff/map-cmdline.lg 

Die URL funktioniert immer noch von diesem Augenblick an, aber hier ist der Inhalt meiner map-cmdline.lg Datei. Beachten Sie, dass Farben fest codiert sind. zu der Zeit schrieb ich dies, hg nicht Farbe Worte genannt hat (vielleicht noch nicht, ich bin ziemlich veraltet auf dem neuesten hg Updates):

changeset = '\033[0;31m{rev}:{node|short}:{phase} {branches}{bookmarks}{tags} \033[0;34m{author|person}\033[0m\n{desc|firstline|strip} \033[0;32m({date|age})\033[0m\n\n' 
changeset_verbose = '\033[0;31m{rev}:{node}:{phase} \033[0;34m{author|person}\033[0m {desc|firstline|strip} \033[0;32m({date|age}) {branches}{bookmarks}{tags}\n\n' 

start_branches = ' ' 
branch = '\033[0;32m{branch}\033[0m' 

start_bookmarks = ' ' 
bookmark = '\033[0;32m[{bookmark}]\033[0m ' 
last_bookmark = '\033[0;31m[{bookmark}]\033[0m' 

start_tags = ' ' 
tag = '\033[0;32m{tag}\033[0m, ' 
last_tag = '\033[0;32m{tag}\033[0m' 

Hinweis, dass es eine Kleiner Fehler hier, wenn Sie versuchen, einige Hg-Workflows mit Git-Entsprechungen gleichzusetzen oder umgekehrt. Insbesondere hg incoming könnte 5 commits auflisten, dann hg pull könnte 12 von diesen 5 holen, weil jemand 7 mehr zwischen den beiden Schritten geschoben hat.Git 's separate fetch Schritt und Remote-Tracking-Filialen lösen dies für Sie. Die andere Methode des Umgangs damit, die ich für eine Weile aus anderen Gründen benutzt habe, besteht darin, ein lokales intermediäres Mercurial-Repository für Pull und Push vom gemeinsamen zu behalten.

Das heißt, wenn wir Repo U als Upstream gemeinsam genutztes Repository bezeichnen, machen wir einen Klon ich lokal, dann ein Klon von I in W für die Arbeit zu tun. Wir aktualisieren dann I (unter Verwendung hg pull -u), dann sehen hg incoming (und hg outgoing) in W für Geschwindigkeit und Konsistenz. Es ist am besten, direkt von W zu U zu drücken, um zu vermeiden, mit commit Phasen zu beschäftigen, aber das ist ein Schmerz aus anderen Gründen. Ich fand nie ein wirklich zufriedenstellendes Setup und gab das Zwischen-Repository auf, wenn ich vor Ort arbeitete: es war mehr für den Umgang mit langsamen Netzwerken.

+0

Just zu beachten - Mecurial * hat benannte Farben heute *, aber: sehr begrenzte Menge (zumindest in Win-Konsole) mit 'Label()' , Beispiel aus meiner Map-Datei vom März 2016: 'changeset =" {label ('rot', rev)} {label ('blau', author | person)} {desc | firstline | strip} {label ('grün ', date | age)} {label (' gelb ', branches)} {label (' gelb ', bookmarks)} {label (' gelb ', tags)} \ n \ n "' –

+0

Woher hast du diese '' changeset_verbose' und 'start_branches' von? Wann ist was aktiviert? –

+0

@RobertSiemer: Im Allgemeinen gilt X für "log" und X_verbose für "log -v". Die Namen von start_foo werden vor einem der foo-Namen ausgegeben, aber nur, wenn einer der foo-Namen ausgegeben wird. Ich habe diese von verschiedenen Orten abgeholt, ich bin mir nicht sicher, wie gut die Dokumentation damals war oder jetzt ist. – torek

4

Mit Mercurial 3.8 konfigurieren Sie einfach Ihre .hgrc mit

[experimental] 
graphstyle.parent = | 
graphstyle.grandparent = ' 
graphstyle.missing = 
graphshorten = true 

und mit dem entsprechenden template

$ hg log --graph --template "{rev}{ifeq(branch,'default','',' {branch}')}{if(bookmarks,' {bookmarks}')}{if(tags,' {tags}')} - {desc|firstline}" 
... 
| o 20881 - transaction: add onclose/onabort hook for pre-close logic 
| o 20880 - clone: put streaming clones in a transaction 
| o 20879 - fncache: remove the rewriting logic 
| o 20878 - pull: prevent duplicated entry in `op.pulledsubset` 
| o 20877 - bundle2: part params 
| o 20876 - bundle2: support for bundling and unbundling payload 
| o 20875 - merge with stable 
|/| 
o | 20874 stable - Added signature for changeset 3f83fc5cfe71 
o | 20873 stable - Added tag 2.9.2 for changeset 3f83fc5cfe71 
o | 20872 stable 2.9.2 - backout: correct commit status of no changes made (BC) 
o | 20871 stable - backout: document return code of merge conflict 
| o 20870 - merge with stable 
|/| 
o | 20869 stable - i18n: fix "% inside _()" problems 
o | 20868 stable - i18n: fix "% inside _()" problems 
o | 20867 stable - merge: fix lack of "%s" in format string causing TypeError a 
o | 20866 stable - i18n-pt_BR: synchronized with c57c9cece645 
o | 20865 stable - i18n-ja: synchronized with e259d4c462b5 
| o 20864 - bundle2: support unbundling empty part 
| o 20863 - revset: raise ValueError when calling min or max on empty smartset 
| o 20862 - revpair: smartset compatibility 
| o 20861 - revsetbenchmark: add entry for ::rev:: 
: 

erhalten werde ich Sie mit diesem Alias ​​

[alias] 
ll = log -l 12 --graph --template "{rev}{ifeq(branch,'default','',' {branch}')}{if(bookmarks,' {bookmarks}')}{if(tags,' {tags}')} - {desc|firstline}" 

so

$ hg ll 
o 29100 @default tip - templater: add separate() template function 
o 29099 - bookmarks: jettison bmstore's write() method per deprecation policy 
o 29098 - merge with stable 
|\ 
| o 29097 stable - deprecation: gate deprecation warning behind devel configurn 
| | 
| ~ 
o 29096 - crecord: update downarrowshiftevent() docstring, remove todo 
o 29095 - crecord: remove things that don't happen in functions from their docs 
o 29094 - crecord: remove skipfolded keyword argument from patchnode.previtem() 
o 29093 - crecord: update a copy-pasted comment in downarrowshiftevent() 
o 29092 - crecord: drop the version condition for amend 
o 29091 - crecord: add/remove blank lines (coding style) 
o 29090 - localrepo: jettison parents() method per deprecation policy (API) 
o 29089 - revset: define _parsealias() in _aliasrules class 
| 
~ 

Ich denke, ist sehr ähnlich wie Git

$ git log --graph --decorate --oneline --all 
* d32f204 (origin/master, origin/HEAD) ; Remove instrumentation of tramp.el 
* 4c7f329 ; Remove instrumentation of tramp-tests.el 
* 51c816b Fix a problem of tramp-tests on hydra. 
* 62d7aca Pacify byte-compiler in lisp/vc 
* 9e6302c ; Merge from origin/emacs-25 
|\ 
* \ 6d0703a Merge from origin/emacs-25 
|\ \ 
* | | 433d366 'text-quoting-style' now affects only ` and ' 
* | | 8939ae6 Revert "Fix spurious fontification of "for (; a * b;)" in CC Mod" 
* | | cfa59d6 ; Instrument tramp-tests.el 
* | | c20cc09 Move "Recent messages" earlier in report-emacs-bug 
* | | a88f22b Pacify byte compiler in tramp.el 
* | | c8b7a6a Merge from origin/emacs-25 
|\ \ \ 
* \ \ \ 9418ab3 ; Merge from origin/emacs-25 
|\ \ \ \ 
* | | | | d6dac36 ; Instrument tramp.el 
* | | | | a8231e0 CC Mode now uses the new :after-hook feature of define-deriv-e 
* | | | | 608f2bd ; Instrument tramp-tests.el 
* | | | | fd45b52 Fix the jit-lock-fontify-now test names 
: 
+0

Gibt es Dokumentation über 'graphshorten' und' graphstyle'? –

+0

Diese sind noch '[experimental]' so kann die Code-Kommentare unter https://selenic.com/hg/log?rev=graphmod – santiagopim

+0

Browsen ist es möglich für mercurial zu drucken, aus welcher Fernbedienung der Zweig stammt? – nonsensickle

2

Dritter Versuch, Follow-up @santiagopim.

Ja, Mercurial und Git verwenden schwere verschiedene Konzepte (keine Remote-Tracking, Pull | Push standardmäßig alle Zweige zu übertragen), aber: wenn Sie möchten, verwenden Sie Mercurial in mehr Git-Stil mit zahlreichen Remote-Repos mit divergiert Geschichte, können Sie:

  • mit santiagopim ausgezeichneten Vorlage (oder erweitert es mit torek Andeutungen in voll funktions Stil)
  • hinzugefügt hgremotenames oder remotebranches Erweiterungen (die, kurz gesagt, fügen Sie beschreibende Lesezeichen für jeden Remote-Namen gezogen)

Holen Sie sich etwas wie Git's Log.

0

Versuchen Sie TortoiseHg. Es ist nicht die Befehlszeile, aber es erfüllt die Anforderungen.

Es hebt auch die Tipps von jedem Zweig (in mercurial "Köpfe" genannt). Wenn Sie den Namen des Zweigs einfach anzeigen, werden sie nicht hervorgehoben, da jeder Commit einen Zweignamen hat.

2

--graph ist --graph in hg. Und der Effekt von --all ist der Standardwert.

Für --decorate und --oneline Ich habe in meinem .hgrc:

[alias] 
la = log --graph --template {oneline} 

[templatealias] 
oneline = '{hash}{myBranch}{myBookmarks}{myTags} {name} {commitMsg}\n' 
hash = "{label(ifeq(phase, 'secret', 'yellow', ifeq(phase, 'draft', 'blue', 'red')), node|short)}" 
myBranch = "{ifeq(branch, 'default', '', label('green', ' ({branch})'))}" 
myBookmarks = "{bookmarks % ' {bookmark}{ifeq(bookmark, active, '*')}{bookmark}'}" 
myTags = "{label('yellow', tags % ' {tag}')}" 
name = '{label('blue', author|person)}' 
commitMsg = '{desc|firstline|strip}' 

[experimental] 
graphshorten = true 

Diese Lösung nicht die veraltete nicht verwendet --style Argument. Stattdessen, wie Sie im Alias-Abschnitt sehen können, wird es von hg la über die Option --template aktiviert. Da Vorlagen verschachtelt werden können, zeigt der Name "oneline" den Hash, den Zweig, die Lesezeichen, die Tags, den Committer und die Commit-Nachricht.

Der Hash ändert die Farbe abhängig von der Phase des Commits in diesem Beispiel.

Obwohl die Vorlage nur den letzten Zeilenumbruch für jede Zeile vorschlägt, fügt hg eine zusätzliche Leerzeile zwischen jedem Commit ein. Die Option graphshorten = true vermeidet dies.

Sie benötigen eine Erweiterung, um etwas ähnliches zum Konzept der Remote-Tracking-Zweige zu haben.

Hier das Ergebnis (Super Farben fehlen):

| o 821ee2270f00 (lowercase_eats_whitespace) Robert Siemer add 'lowercase_eats_whitespace' directive 
| o 9a86b49dc3ba (settings_passing) Robert Siemer restructure settings-passing in parsers and grako 
|/ 
o 31664ddc943b Juancarlo Añez Merged in siemer/grako/siemer_fixup_regex (pull request #43) 
|\ 
| o 317cea8eba42 (siemer_fixup_regex) Robert Siemer buffering.py: remove a superfluous regexp.DOTALL from a '[...]+' pattern 
|/ 
o 31641ef78ba8 apalala Added tag 3.9.1 for changeset f33a2e80bb7d 
o f33a2e80bb7d 3.9.1 apalala Getting ready for release 3.9.1