Ich habe Mercurial verwendet, möchte aber eine kurze Demo von Git machen.
Was sind die Git-Äquivalente von:
hg init . # start a project in the current directory
hg addremove # look for any added or deleted files
hg commit -m "comment" # commit any uncomitted changes
hg status # what have i changed since the last commit?
Antworten:
Der Git-HG Rosetta Stein ist nicht schlecht
Es gibt ein paar andere Fallstricke zwischen den beiden, die dort nicht erwähnt werden. Diese Liste wurde aus meinem eigenen Blog-Beitrag entfernt, als ich in die andere Richtung ging (git -> hg).
Hg
.hgignore
, Syntax: glob ist das gleiche Verhalten wie gits .gitignore.Git
.git/config
, die~/.gitconfig
Verwendung git-config die Werte zu ändern ,Hg
.hg/hgrc
, die~/.hgrc
Verwendunghg help -c config
Git
git commit -v<br>
Hghg diff | less; hg commit
Git
gitk<br>
Hghg view, or thg from [TortoiseHg][1]
Git
git gui<br>
Hg Mercurial liefert keine GUI zur Auswahl von Änderungssätzen, sondern nur einen Konsolenbefehlhg record
.Git
git rebase<br>
Hg hg Rebase . Denngit rebase --interactive
es gibt hg histedit oder Mercurial QueuesGit
git push URL ; git remote add origin URL<br>
Hghg push URL; $EDITOR .hg/hgrc ; [paths] default = URL
Git
gitk, git log origin/master..HEAD<br>
Hghg outgoing
Git
git format-patch RANGE<br>
Hghg email -m filename -o
Git
git add . ;
Beachten Sie den PunktHg
hg add ;
Kein Punkt erforderlich.Git
git checkout REVISION-KEY<br>
Hghg update CHANGESET
Um die Lücken zu füllen, einige der nützlichsten Befehle von Mercurial:
Hg
hg record
Git
git add -p; git commit
Hg hg inc [URL]
Git Kein echtes Äquivalent. Sie können nur das Äquivalent von tun
hg pull; hg log -r .:
Hg
hg out URL
Git Bitte hinzufügen, wenn Sie wissen wie.
Für die Lösung von Zusammenführungskonflikten verfügt der
hg resolve
Befehl in Mercurial über einige Optionen, die das Verhalten ändern:Hg
hg resolve -m FILE
(markiert die Datei als behoben, indem das Konfliktproblem manuell behoben wurde)Git
git add FILE
Hg
hg resolve -u FILE
markiert die Datei als nicht aufgelöstesGit
git reset HEAD FILE
, um die Datei zu entfernenHg
hg resolve -l
(listet Dateien mit gelösten / ungelösten Konflikten auf)Git
git status
- Dateien, die sauber zusammengeführt wurden, werden automatisch zum Index hinzugefügt, diejenigen, die keine Konflikte habenHg
hg resolve FILE
(versucht nach einer Zusammenführung, die Datei erneut zusammenzuführen)Git kein Äquivalent für die erneute Zusammenführung, von dem ich weiß.
quelle
hg record
es nicht sehr benutzerfreundlich ist, isthg crecord
(von der crecord-Erweiterung ) eine fluchbasierte Text-Benutzeroberfläche, die extrem einfach zu bedienen ist.hg resolve
ist einer der Gründe, warum ich Git bevorzuge. Standardmäßighg resolve
zerstört Ihre schön manuell aufgelöste Zusammenführung, wenn Sie keine Argumente übergeben!Hinweis: Einer der größten Unterschiede zwischen Git und Mercurial ist das explizite Vorhandensein des Index- oder Staging-Bereichs .
Von Mercurial für Git User :
Der Trick ist, dass Sie den Index wirklich verstehen müssen, um Git vollständig auszunutzen. Wie dieser Artikel vom Mai 2006 uns damals erinnert (und es ist heute noch wahr):
"Wenn Sie den Index ablehnen, verweigern Sie wirklich git selbst."
Dieser Artikel enthält viele Befehle, die jetzt einfacher zu verwenden sind (verlassen Sie sich also nicht zu sehr auf den Inhalt;)), aber die allgemeine Idee bleibt:
Sie arbeiten an einer neuen Funktion und nehmen geringfügige Änderungen an einer Datei vor.
Zu diesem Zeitpunkt werden bei Ihrem nächsten Commit zwei geringfügige Änderungen in der aktuellen Verzweigung vorgenommen
Zeichnet nur die Änderungen auf, die zu diesem Zeitpunkt zum Staging-Bereich (Index) hinzugefügt wurden, nicht die wichtigsten Änderungen, die derzeit in Ihrem Arbeitsverzeichnis sichtbar sind.
Beim nächsten Commit werden alle anderen wichtigen Änderungen in der neuen Verzweigung 'newFrature_Branch' aufgezeichnet.
Das interaktive Hinzufügen oder sogar das Aufteilen eines Commits sind Funktionen, die Mercurial über den
hg record
Befehl ' ' oder andere Erweiterungen zur Verfügung stellt: Sie müssen sie installierenRecordExtension
oder dieCrecordExtension
.Dies ist jedoch nicht Teil des normalen Workflows für Mercurial.
Git betrachtet ein Commit als eine Reihe von " Änderungen des Dateiinhalts " und lässt Sie diese Änderungen einzeln hinzufügen.
Sie sollten diese Funktion und ihre Konsequenzen untersuchen: Der größte Teil der Git-Leistung (wie die Möglichkeit, eine Zusammenführung einfach rückgängig zu machen (oder das Problem zu halbieren oder ein Commit rückgängig zu machen) , im Gegensatz zu Mercurial ) stammt aus diesem Paradigma des "Dateiinhalts".
tonfa (im Profil: "Hg dev, pythonist": Zahlen ...) mischte sich in den Kommentaren ein:
Oh Junge. Jetzt geht das schon wieder los.
Erstens bin ich nicht hier, um ein Werkzeug besser aussehen zu lassen als ein anderes. Ich finde Hg großartig, sehr intuitiv und gut unterstützt (insbesondere unter Windows, meiner Hauptplattform, obwohl ich auch unter Linux und Solaris8 oder 10 arbeite).
Der Index ist tatsächlich vorne und mittig in der Art, wie Linus Torvalds mit einem VCS arbeitet :
Die Kombination des Index (der nicht nur in Git zu finden ist) und des Paradigmas "Content is King" macht ihn nun ziemlich einzigartig und "git-ish" :
Hinweis: Der "Inhalt" ist hier wie folgt definiert :
Aus den FAQ ergeben sich folgende Hauptvorteile:
git diff
, und validieren Sie jeden kleinen Schritt mitgit add
odergit add -u
.git diff --base
,git diff --ours
,git diff --theirs
.git commit --amend
das Ändern nur der Protokollnachricht, wenn der Index in der Zwischenzeit nicht geändert wurdeWährend Sie im Allgemeinen Recht haben (in Bezug auf den "getesteten oder kompilierten" Teil), können Sie mit der Art und Weise, wie Git Sie verzweigen und zusammenführen (Cherry-Picking oder Rebasing), so oft Sie möchten in einem temporären privaten Zweig festschreiben (nur Push) ("Backup" -Repository), während diese "hässlichen Commits" in einem öffentlichen Zweig mit den richtigen Tests erneut ausgeführt werden.
quelle
Mercurial:
Git-Äquivalente:
quelle
git add -u
mehr als-A
; -u führt Änderungen für alle verfolgten Dateien durch und ignoriert neue nicht verfolgte Dateien.git status
entsprichthg status
. Ich bin neu in Hg und habe es nicht geschafft, dass der Status von hg ähnlich wie der von Git funktioniert.Es ist ungefähr das gleiche, ohne Add-Remove:
Dies sind jedoch Befehle, die Sie verwenden würden, wenn Sie alleine arbeiten. Sie kommen in das nette Zeug, wenn Sie Ihre Änderungen mit der Arbeit anderer Leute mit
git pull
undgit push
und verwandten Befehlen zusammenführen möchten .quelle