Wie liste ich alle Dateien in einem Repository in Mercurial (hg) auf?

74

Gibt es in mercurial einen Befehl, der alle Dateien auflistet, die derzeit der Quellcodeverwaltung unterliegen?

Ich kann dir /salle Dateien in meinem Ordner und meinen Unterordnern auflisten, habe aber keine Ahnung, welche zu meinem Repository hinzugefügt wurden. Ich habe eine Vielzahl von ausgeschlossenen Dateitypen und Ordnern und möchte überprüfen, ob keiner von ihnen hinzugefügt wurde, bevor ich sie in meiner .hgignore-Datei einrichte.

JamesWampler
quelle
Sie sollten einen Blick auf diesen Beitrag werfen: mercurial.808500.n3.nabble.com/…
Pedro

Antworten:

70

hg status --all listet alle Dateien im Baum auf, wobei ein Buchstabe den Status angibt: M für geändert, C für sauber (im Besitz von hg) und I für ignoriert.

Verwenden Sie für nur ignorierte Dateien hg status -i. Verwenden Sie nur Dateien, die beim nächsten Commit hinzugefügt werdenhg status -a . Diese zeigen nur das, was Sie wissen müssen, und erfordern nicht das Scannen einer langen Dateiliste.

Ned Batchelder
quelle
2
Da andere hier nach Informationen suchen könnten, dachte ich, ich würde meine neue hglist-Erweiterung erwähnen, die Mercurial einen "ls" -Befehl gibt: alastairs-place.net/projects/hglist
alastair
2
hg st -Aist die abgekürzte Version des oben genannten Befehls.
Serge Stroobandt
10
Tolle Antwort, aber sie beantwortet die Frage nicht direkt. hg status -cListet bei einem sauberen Arbeitszustand alle nachverfolgten Dateien und nur nachverfolgte Dateien auf. Mit anderen Änderungen hg status -carmdwird der Trick tun. Hinzufügen -n, um das Statusflag auszuschließen.
undefiniert
Diese Antwort ist nicht richtig, da hg st --all auch alle nicht verfolgten Dateien auflistet (mit einem vorhergehenden?)
bph
64

Sie können den hg locateBefehl auch auschecken . Ich benutze es zusammen mit der -IOption, wenn ich die Dateien auf ein bestimmtes Verzeichnis beschränken möchte.

So listen Sie alle Dateien in Ihrem Repository auf:

hg locate

Aus dem Repository-Verzeichnis ("root"):

hg locate -I dir/sub_dir/dir_of_interest

Der an übergebene Pfad -Imuss sich je nach Verzeichnis ändern, in dem Sie den Befehl ausführen. Wenn Sie den Befehl dirim obigen Beispiel aus dem Verzeichnis ausführen , müssen Sie Ihr Argument ändern, um Folgendes zu finden:

hg locate -I sub_dir/dir_of_interest

Die Liste der Ausgabedateien bleibt unverändert und zeigt den vollständigen Pfad jeder Datei im Repository an.

Versuchen Sie es hg help -v locatefür weitere Informationen.

JS.
quelle
2
Genau das, was ich brauchte, danke. Dies ist eine bessere Antwort für jemanden, der nur nachverfolgte Dateien auflisten muss.
Gringo Suave
2
hg locist die abgekürzte Version des oben genannten Befehls.
Serge Stroobandt
4
Das ist die wahre Antwort. Neds Antwort ist ein Nichtstarter.
Neil Traft
2
Wenn Sie wirklich so verwenden möchten hg locate, können Sie das aktuelle Verzeichnis automatisch abrufen mit : hg locate -I `pwd`.
Benjohn
@NeilTraft Ich kann Ihre Begeisterung für diese Verwendung nicht teilen hg locate. hg status -ilistet nur Dateien auf, die ignoriert werden. hg status -alistet nur diejenigen auf, die durch ein Commit hinzugefügt werden. Bei hg locatebesteht ein erhebliches Risiko von Benutzerfehlern beim Abgleichen der angezeigten Liste mit der erwarteten Liste. Was hg locateerstaunlich nützlich ist, ist die Suche in bestimmten Revisionen nach bestimmten Dateinamen. In ähnlicher Weise hg grepwird auch der gesamte Dateiinhalt über alle Revisionen durchsucht.
Benjohn
23

hg manifestlistet nur die Dateien im Repository auf, während hg status --allalle Dateien in der Repository-Struktur aufgelistet werden und eine Markierung enthalten ist, für die verfolgt wird und für welche nicht.

Mike Pape
quelle
2
Dies gibt mir genau das, was ich wollte, obwohl ich den kleinen Nachteil habe, dass es nicht nach Ordnern eingegrenzt werden kann, wie es das OP wollte. Es ist immer noch besser als die akzeptierte Antwort.
Neil Traft
3

Nur ignorierte oder hinzugefügte Dateien auflisten

Um nur die ignorierten Dateien aufzulisten, gehen Sie wie folgt vor : hg status -i.

Führen Sie für gerade hinzugefügte Dateien Folgendes aus hg status -a.

Wenn Sie nicht gerne tippen, können Sie diese auf hg sta -iund kürzen hg sta -a.

Diese beiden Verwendungen von statussind einfacher als locateund geben Ihnen die spezifischen Dateizustände, um die Sie sich Sorgen machen, sodass sie wesentlich weniger fehleranfällig sind.

Mehr über hg status

Um alle Dateien in einem Mercurial Repo aufzulisten, gehen Sie wie folgt vor : hg status --all.

Die Dateien erhalten ein Präfix, wenn sie aufgelistet werden:

  M = modified
  A = added
  R = removed
  C = clean
  ! = missing (deleted by non-hg command, but still tracked)
  ? = not tracked
  I = ignored

Wenn Sie nur die Dateien in einem Ordner auflisten möchten , können Sie einen Pfad angeben:

  • hg st --all MyFolder - Alle Dateien in MyFolder
  • hg sta -i MyFolder - Nur ignorierte Dateien in MyFolder.

Neben den Flags -i"Ignoriert" und -a"Hinzugefügt" stehen weitere Flags zur Verfügung, um nur die Dateien mit einem bestimmten Status aufzulisten.

Bekommen help

Lesen Sie hier die andere sehr nützliche Antwort, um eine umfassende Erläuterung des statusBefehls zu erhalten. Es hat Abstimmungen, weil der Autor versucht hat zu zeigen, dass Sie all das entdecken können, indem Sie Mercurial nach dem statusBefehl wie folgt fragen :

hg help status

Sie können Mercurial bitten, Ihnen einen der folgenden Befehle mitzuteilen. Wenn Sie eine Liste der Mercurial-Befehle wünschen, geben Sie Folgendes ein hg help.

Benjohn
quelle
-3
C: \> hg help -v status
hg status [OPTION] ... [DATEI] ...

Aliase: st

Geänderte Dateien im Arbeitsverzeichnis anzeigen

    Status der Dateien im Repository anzeigen. Wenn Namen angegeben werden, nur Dateien
    diese Übereinstimmung werden angezeigt. Dateien, die sauber oder ignoriert sind oder die Quelle von a
    Kopier- / Verschiebevorgänge werden nur aufgelistet, wenn -c / - sauber, -i / - ignoriert,
    -C / - Kopien oder -A / - alle sind angegeben. Es sei denn, die mit "show" beschriebenen Optionen
    nur ... "angegeben sind, werden die Optionen -mardu verwendet.

    Option -q / - quiet verbirgt nicht verfolgte (unbekannte und ignorierte) Dateien, es sei denn
    explizit angefordert mit -u / - unbekannt oder -i / - ignoriert.

    HINWEIS: Der Status scheint mit diff nicht übereinzustimmen, wenn sich die Berechtigungen geändert haben
    oder es ist eine Zusammenführung aufgetreten. Das Standard-Diff-Format meldet nicht
    Berechtigungsänderungen und Diff melden nur Änderungen in Bezug auf eine Zusammenführung
    Elternteil.

    Wenn eine Revision angegeben ist, wird sie als Basisrevision verwendet. Wenn zwei
    Überarbeitungen werden angegeben, die Unterschiede zwischen ihnen werden angezeigt. Die Änderung
    Die Option kann auch als Verknüpfung verwendet werden, um die geänderten Dateien von a aufzulisten
    Überarbeitung von seinem ersten Elternteil.

    Die Codes, mit denen der Status von Dateien angezeigt wird, sind:

      M = modifiziert
      A = hinzugefügt
      R = entfernt
      C = sauber
      ! = fehlt (gelöscht durch Nicht-HG-Befehl, aber immer noch verfolgt)
      ? = nicht verfolgt
      Ich = ignoriert
        = Ursprung der vorherigen Datei als A aufgeführt (hinzugefügt)

Optionen:

 -A - Alle zeigen den Status aller Dateien
 -m --modified zeigt nur geänderte Dateien an
 -a --added zeigt nur hinzugefügte Dateien an
 -r --removed zeigt nur entfernte Dateien an
 -d --deleted zeigt nur gelöschte (aber verfolgte) Dateien an
 -c --clean zeigt nur Dateien ohne Änderungen an
 -u --unknown zeigt nur unbekannte (nicht verfolgte) Dateien an
 -i --ignored zeigt nur ignorierte Dateien an
 -n --no-status Statuspräfix ausblenden
 -C --kopien zeigen die Quelle der kopierten Dateien
 -0 --print0 Enddateinamen mit NUL zur Verwendung mit xargs
    --rev zeigen Unterschied zur Revision
    --change listet die geänderten Dateien einer Revision auf
 -I - Include enthält Namen, die den angegebenen Mustern entsprechen
 -X - Ausschluss ausschließen Namen, die den angegebenen Mustern entsprechen

globale Optionen:
 -R - Stammverzeichnis des Repository-Repositorys oder Name der Overlay-Bundle-Datei
    --cwd Arbeitsverzeichnis ändern
 -y --noninteractive nicht auffordern, 'Ja' für erforderliche Antworten annehmen
 -q --quiet Unterdrückung der Ausgabe
 -v --verbose aktiviert zusätzliche Ausgabe
    --config set / override config option (benutze 'section.name = value')
    --debug aktiviert die Debugging-Ausgabe
    --debugger Debugger starten
    --encoding legt die Zeichensatzcodierung fest (Standard: cp1252)
    --encodingmode legt den Zeichensatz-Codierungsmodus fest (Standard: strict)
    --traceback gibt in Ausnahmefällen immer einen Traceback aus
    --Zeit Zeit, wie lange der Befehl dauert
    --profile Druckbefehlsausführungsprofil
    --version gibt Versionsinformationen aus und beendet das Programm
 -h --Hilfe Hilfe anzeigen und beenden
simendsjo
quelle
5
Komisch, wie meine Antwort Jahr für Jahr abgelehnt wird. Aber ist es wirklich so schlimm, den Leuten zu sagen, dass sie das Handbuch lesen sollen? Hat der Stackoverflow die Dokumentation ungültig gemacht? Haben die Leute aufgehört, --help/ /?/ manund andere Dokumentationen zu verwenden, weil es schneller ist, nach dem Stapelüberlauf zu fragen, als zu lesen? Ich weigere mich, meine Antwort zu entfernen :)
simendsjo
Na ja, Sie können für mich stimmen, da dies hier die nützlichste Antwort ist. Ich werde kein weiteres schreiben, basierend auf dem, was ich daraus entdeckt habe, und sehen, ob ich irgendwelche Upvotes bekomme :-)
Benjohn
1
Für das, was es wert ist, ist Ihre Antwort großartig. Ein Benutzer muss dies jedoch wissen status, da einer der hgBefehle dies tatsächlich an erster Stelle tut. Ich benutze Mercurial jeden Tag und wusste nicht, dass man aufgefordert werden kann, ignorierte Dateien anzuzeigen.
Benjohn
2
@simendsjo: Bei StackOverflow geht es nicht darum, Dokumente neu zu schreiben. Ihre "Antwort" ist eine Textwand, und das wichtige Stück ( --all) ist nicht einmal auf dem Bildschirm (Sie müssen scrollen, um es zu sehen). und nirgends geben Sie tatsächlich das eigentliche Wort, um das Ziel zu erreichen. Insgesamt nicht sehr hilfreich. Zum Vergleich gibt Benjohn zuerst den gewünschten Befehl und bietet dann eine Erklärung an.
Ethan Furman