96 Stimmen

Git ls-files: Wie identifiziert man neue Dateien (hinzugefügt, aber nicht committet)?

Nachdem ich git add aufgerufen habe, zeigt der Befehl git status mir etwas ähnliches an:

...
neue Datei:    

Irgendwie schaffe ich es nicht, dieselben Informationen zu bekommen, wenn ich ls-files benutze. ls-files -tc zeigt mir in diesem Fall:

H 
H 
H 

Es scheint keinen Befehlsschalter für neue Dateien zu geben. Die Datei wird als zwischengespeichert gemeldet, was in Ordnung ist, aber wie finde ich heraus, dass sie zu diesem Zeitpunkt nicht committet ist?

Ist das mit ls-files oder einem ähnlichen Befehl möglich (wo ich nicht so viele Ausgaben wie im Fall von git status analysieren muss)?

127voto

Andrew Aylett Punkte 37790

Sie möchten git diff --cached verwenden. Mit --name-only werden alle Dateien aufgelistet, die Sie im Index im Vergleich zu HEAD geändert haben. Mit --name-status können Sie auch das Statussymbol erhalten, mit --diff-filter können Sie angeben, welche Dateigruppe Sie anzeigen möchten ('A' für neu hinzugefügte Dateien beispielsweise). Verwenden Sie -M, um die Erkennung von Verschiebungen zu aktivieren, und -C, um die Erkennung von Kopien zu aktivieren, wenn Sie diese wünschen.

Für die genaueste Interpretation dessen, was Sie geschrieben haben, wird git diff --cached --name-only --diff-filter=A alle Dateien auflisten, die Sie seit HEAD hinzugefügt haben und die nicht in HEAD existieren.

62voto

Mike Seplowitz Punkte 8897

Klärung: Dies ist eine Möglichkeit, die Dateien zu zeigen, die ich hinzufügen möchte. Dies ist nicht das, wonach der OP gesucht hat, aber ich lasse diesen Beitrag hier, falls er für andere nützlich ist.

Dies scheint nur die Dateien anzuzeigen, die ich hinzugefügt habe [zu meinem Arbeitskopie, nicht dem Index], aber nicht von meinen Standard-Ignoriermustern abgedeckt sind:

 $ git ls-files --others --exclude-standard

Ohne --exclude-standard zeigt es auch Dateien an, die ignoriert werden, wenn ich git status ausführe.

5voto

Daniel Dantas Punkte 251

Einfacher Weg, um alle neuen, geänderten und gelöschten Dateien zu erhalten:

git ls-files --others --modified --deleted --exclude-standard

Beachten Sie die offizielle Dokumentation: https://git-scm.com/docs/git-ls-files

Verwenden Sie "--others", wenn Sie neue/unbeobachtete Dateien sehen möchten

Verwenden Sie "--modified", wenn Sie geänderte Dateien sehen möchten

Verwenden Sie "--deleted", wenn Sie gelöschte Dateien sehen möchten

--exclude-standard schließt die in .gitignore angegebenen Dateien aus

3voto

Yaro Punkte 106

Ich würde gerne alle hinzugefügten und geänderten Dateien sehen, also die Zusammenführung von
git diff --cached --name-only

  • git ls-files --modified --deleted
    aber ohne [1]+ Stopped ... dazwischen.

Wenn ich git diff --cached --name-only && git ls-files --modified --deleted benutze, erhalte ich:

content/blog/2020/05/artificial-intellect.json
content/blog/2020/05/artificial-intellect.pug

[1]+  Stopped                 git diff --cached --name-only
content/index.json
index.php

0voto

Aber wenn du wie ich committed und gepusht hast, kannst du

git diff-tree --no-commit-id --name-only -r HEAD | xargs zip archive.zip

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X