Git-Status - Gibt es eine Möglichkeit, Änderungen nur in einem bestimmten Verzeichnis anzuzeigen?


135

Ich möchte eine Liste der Dateien sehen, die seit dem letzten Festschreiben geändert wurden, wie git statusgezeigt, aber ich kümmere mich nur um Dateien, die sich in einem einzelnen Verzeichnis befinden. Gibt es eine Möglichkeit, dies zu tun? Ich habe es versucht git status <directory>, aber es scheint, dass dies etwas völlig anderes bewirkt (listet alle geänderten Dateien auf, wie es wäre, wenn ich git add <directory>zuerst schreiben würde ).

Die Dokumentation zum Git-Status sagt nicht viel aus, abgesehen von der Tatsache, dass sie dieselben Optionen akzeptiert wie Git-Commit (aber der Zweck von Git-Commit besteht nicht darin, Listen geänderter Dateien anzuzeigen).

Antworten:


198

Aus dem Verzeichnis heraus:

git status .

Sie können wirklich jeden Pfad verwenden, verwenden Sie diese Syntax:

git status <directoryPath>

Zum Beispiel für ein Verzeichnis mit dem Pfad "my / cool / path / here"

git status my/cool/path/here

3
Vielen Dank! Außerdem scheint 'git status <Verzeichnis>' das zu tun, was ich erwarten würde - ich kann mich ehrlich gesagt nicht erinnern, welches Problem ich vorher damit hatte ... vielleicht handelt es sich um eine andere Git-Version, keine Ahnung.
Kuba Suder

Kein Problem, und möglicherweise - die neueren Versionen von git scheinen die Dinge einfacher zu machen.
Sam Doidge

3
Ja, das Verhalten hat sich definitiv von 1,6 auf 1,7 geändert. Es erfüllt die OP-Anforderungen in 1.7, aber 1.6 wird über das gesamte Repo fortgesetzt.
Colgur

31

Der Grund, warum git statusdieselben Optionen verwendet werden, git commitbesteht darin, git statuszu zeigen, was passieren würde, wenn Sie sich mit denselben Optionen verpflichten, an die Sie übergeben haben git status. In dieser Hinsicht git statusist wirklich git commit --preview.

Um das zu bekommen, was Sie wollen, können Sie dies tun, wobei inszenierte Änderungen angezeigt werden:

git diff --stat --cached -- <directory_of_interest>

und dies, das nicht inszenierte Änderungen zeigt:

git diff --stat -- <directory_of_interest>

oder das, was beides zeigt:

git diff --stat HEAD -- <directory_of_interest>

2
Dies funktioniert teilweise, obwohl es keine neu erstellten (nicht verfolgten) Dateien anzeigt, wie es der Git-Status tut ...
Kuba Suder

OK, ich war mir nicht sicher, welche Berichte Sie brauchten. Wenn Sie nach nicht bereitgestellten Dateien suchen müssen, versuchen Sie git ls-files --others <directory_in_question>oder ls-files -o.
CB Bailey

git ls-files -oZeigt Dateien in nicht bereitgestellten Verzeichnissen rekursiv an, während git statusnur das Verzeichnis der obersten Ebene angezeigt wird . Und man müsste die gesamte Farbcodierung usw. komponieren git diff, git ls-filesausgeben und neu erstellen, git statusdie vorgesehen ist, wenn sie ersetzt werden soll git status. Ich würde auch gerne eine Lösung dafür sehen!
Peter V. Mørch


2

Als Hinweis, wenn Sie die Überprüfung der Git-Statistiken vereinfachen, ohne in das Git-Verzeichnis zu wechseln;

### erstelle Datei
sudo nano / usr / local / bin / gitstat

### füge dies ein

#! / usr / bin / env bash

dir = $ 1

if [[$ dir == ""]]; dann
    echo "Verzeichnis ist erforderlich!"
    Ausfahrt
fi

echo "Git stat für '$ dir'."

git --git-dir = $ dir / .git --work-tree = $ dir diff --stat

### geben exec perm
sudo chmod + x / usr / local / bin / gitstat

Und dieses einfache Skript aufrufen : gitstat /path/to/foo-project. Sie können es auch verwenden , während in foo-projectnur tun , gitstat .kürzer und so annehmen , als git status -s, git diff --statoder git diff --stat HEADwenn Ihr immer Konsole statt GUIs verwenden.

Credits:

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.