Mercurial "hg status" und relative Pfade
Ich bin sowohl mit Hilfe von mercurial und git für die verschiedenen Projekte und wie Sie beide. Was finde ich ein bisschen ärgerlich über mercurial ist, dass "hg status" zeigt Pfade relativ zum repository root, nicht in das aktuelle Verzeichnis(im Gegensatz zu git). Kann dieses Verhalten optimiert werden irgendwie?
- Ich denke eine option .hgrc sollte Hinzugefügt werden, finden Sie unter bz.selenic.com/show_bug.cgi?id=3835 für den feature request.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die übliche Abhilfe ist, um zu laufen:
Für ältere Versionen des Mercurial, vor der Version 1.7, könnten Sie mit diesem hack hinzufügen, um Ihr Repositorys ".hg/hgrc" - Datei:
Muss die alias-Erweiterung aktiviert, so müssen Sie möglicherweise einen hinzufügen", alias=", um Ihre ~/.hgrc Datei.
Beginnend mit Mercurial 1.7, die alias-Erweiterung erfuhr das "!" Flucht die Verwendung von shell-Befehlen, so kann man nun eine Globale alias, das dies tut:
Nicht verwenden
st = !hg status $(hg root)
, denn das wird eine unendliche Schleife, ausgeführt hg-status über und über. Es sieht aus wie ein bug in der alias-Analyse - wenn Sie möchten, aliashg status
zu zeigen, den Pfad von der Wurzel, dann die folgende gebetsformel arbeitet in der global $HOME/.hgrc:st = !hg __mystatus $($HG root) $HG_ARGS
hg status ''
funktioniert zumindest auf meiner version von hg (2.6)Sehen workspace-status relativ zum aktuellen Verzeichnis, können Sie immer verwenden "." (ein einzelner Punkt), als argument von "hg status", d.h.:
Den Unterschied, wenn Sie ausdrücklich darum bitten, die aktuelle Arbeitsverzeichnis ist, dass die relative Dateinamen-Pfade verwenden, die als Ausgangspunkt:
Den standard-Weg, der funktioniert seit alten mercurial-Versionen (>= 1.1) aus dem Jahr 2008 ist:
welche ergibt:
Seit mercurial 1.3 (2009) definieren Sie eine
alias
wenn Sie wollen:Dieses Verhalten war schließlich dokumentiert in 3.4 (2015):
Seit mercurial 4.2 (Mai 2017) man kann sagen, der Befehl "status" immer drucken " relative Pfade setzen diese in Ihrem
hgrc
:Tests direkt auf der Kommandozeile (hg >= 4.2):
Schließlich mercurial 4.3 eingeführt
ui.tweakdefaults
, die unter anderem änderungen einige Vorgaben zu moderneren:Wenn Sie auf eine moderne mercurial (>=4.3), dies ist der offiziell empfohlene Weg.
Hg wird immer besser mit der Zeit :
Mit hg 2.2.3, kann ich definieren
st
alias.Folglich:
hg st
geben Sie den Pfad relativ zum aktuellen Verzeichnishg status
geben Sie den Pfad relativ zum hg root-VerzeichnisIch bin das hinzufügen dieser Antwort nicht, weil es besser ist als die akzeptierte Antwort, aber weil es verdeutlicht die Unterscheidung zwischen "hg status". und "hg status $(hg root)". Die haben vielleicht verwechseln einige Kommentatoren - schlimmer noch, die führen können, um zu vergessen, um zu überprüfen, für die notwendigen Sachen.
"hg status". nur Berichte, die den status für den Teilbaum darunter ., die Verwendung relativer Pfade.
"hg status $(hg root)" Berichte-status für die gesamte repo, die Verwendung von Pfaden relativ zum CWD.
Beide sind nützlich.
(Im Allgemeinen, "hg status "Pfad" zeigt den status für den Teilbaum unterhalb Pfad (der gesamte repo-wenn Pfad = $(hg root)", aber relativ zum CWD. (Ich muss zugeben, dass ich finde das verwirrend, denn es sind zwei Dinge passiert: Teilbaum zu bekommen, Stand auf, und cwd, um zu zeigen, Pfade relativ zur.))
Dies ist das Beispiel eines shell-Sitzung unten eingebettet.
Deshalb, wenn Sie wollen etwas tun, wie machen Sie ein backup der Dateien im lokalen Teilbaum, ohne Einchecken, und dann wieder (brauche ich oft, um dies zu tun, wenn Sie mit "hg-Sperre", weil ich mich mithilfe von FrameMaker-Dateien, die nicht diffed oder fusioniert innerhalb der hg (oder kaum überhaupt)):
Aber wenn Sie wollen, um alle Dateien in der Struktur, die gemeldet werden, von status
Durch die Art und Weise, die Warnung zeigt die Probleme kollidierender Dateinamen. Normalerweise verwende ich ein kleines tool, muss ich hinzufügen .bak suffix, oder xargs. Aber dieses Beispiel ist ausreichend.
Übrigens^2, normalerweise mache ich sowas mit "hg status -nm", aber das Beispiel oben ist ausreichend.