2009-04-03 7 views
105

Ich würde gerne eine Liste von Dateien sehen, die seit dem letzten Commit geändert wurden, wie 'Git Status' zeigt, aber ich interessiere mich nur für Dateien in einem einzigen Verzeichnis. Gibt es eine Möglichkeit, dies zu tun? Ich habe 'git status <Verzeichnis>' versucht, aber es scheint, dass dies etwas völlig anderes (listet alle geänderten Dateien, wie sie wäre, wenn ich 'git add < Verzeichnis zuerst geschrieben würde >).git status - Gibt es eine Möglichkeit, Änderungen nur in einem bestimmten Verzeichnis anzuzeigen?

Die Dokumentation für git-status sagt nicht viel aus, abgesehen von der Tatsache, dass sie die gleichen Optionen wie git-commit akzeptiert (aber git-commit dient nicht dazu, Listen geänderter Dateien anzuzeigen ...) .

Antwort

144

Von innerhalb des Verzeichnisses:


Sie können einen beliebigen Pfad wirklich verwenden möchten, verwenden Sie folgende Syntax:

git status <directoryPath> 

Zum Beispiel für das Verzeichnis mit Pfad "my/kühl/path/hier"

git status my/cool/path/here 
+2

Danke! Auch "Git Status " scheint zu tun, was ich erwarten würde - ich erinnere mich ehrlich gesagt nicht, welches Problem ich damit hatte ... vielleicht ist es eine Frage einer anderen Git-Version, weiß ich nicht. –

+0

Kein Problem, und möglicherweise - die neueren Versionen von Git scheinen die Dinge einfacher zu machen. –

+1

Ja, das Verhalten hat sich definitiv von 1,6 auf 1,7 geändert. Es erfüllt die OP-Anforderung in 1.7, aber 1.6 setzt sich über das gesamte Repo fort. – colgur

13

Simplest Lösung:

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

Natürlich ist diese Farben verwirft.

+0

Love it. Keine Extras. – redolent

26

Der Grund, dass git status die gleichen Optionen nimmt als git commit ist, dass der Zweck der git status zu zeigen, was passieren würde, wenn Sie mit den gleichen Optionen begangen, wie Sie git status geben. In dieser Hinsicht ist git status wirklich git commit --preview.

zu bekommen, was Sie wollen, können Sie dies die Shows inszeniert Änderungen machen könnte:

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

und das, was unstaged Änderungen zeigt:

git diff --stat -- <directory_of_interest> 

oder das was zeigt beides:

+1

Dies funktioniert teilweise, obwohl es nicht neu erstellte (nicht geordnete) Dateien zeigt, wie Git-Status ... –

+0

OK, ich war mir nicht sicher, welche Berichte Sie benötigt. Wenn Sie nach nicht gesicherten Dateien suchen müssen, versuchen Sie es mit 'git ls-files --others ' oder 'ls-files -o'. –

+0

'git ls-files -o' zeigt Dateien rekursiv in ungespaltenen Verzeichnissen, während' git status' nur das Verzeichnis der obersten Ebene anzeigt. Und man müsste "git diff", "git ls-files" ausgeben und alle Farbcodierungen usw. nachbilden, die "git status" liefert, wenn es den 'git status' ersetzen soll. Ich würde auch gerne eine Lösung dafür sehen! –

0

Als Beachten Sie, wenn Sie die Überprüfung von git stats vereinfachen, ohne zum git-Verzeichnis zu wechseln;

 
### create file 
sudo nano /usr/local/bin/gitstat 

### put this in 

#!/usr/bin/env bash 

dir=$1 

if [[ $dir == "" ]]; then 
    echo "Directory is required!" 
    exit 
fi 

echo "Git stat for '$dir'." 

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

### give 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-project tun Sie einfach gitstat . und so angenommen, kürzer als git status -s, git diff --stat oder git diff --stat HEAD wenn Sie immer Konsole anstelle von GUI's verwenden.

Credits: