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).

Kuba Suder
quelle

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
Sam Doidge
quelle
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>
CB Bailey
quelle
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
14

Einfachste Lösung:

  1. Gehen Sie in das Verzeichnis
  2. git status | grep -v '\.\.\/'

Dies verwirft natürlich Farben.

Kann Berk Güder
quelle
Bei Bedarf können Sie einige Änderungen hinzufügen, um die Farbe zurückzulassen. Beispiel 1 Beispiel 2
Carson
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:

K-Gun
quelle