2009-04-03 17 views
105

Chciałbym zobaczyć listę plików zmodyfikowanych od ostatniego zatwierdzenia, jak pokazuje "status git", ale zależy mi tylko na plikach znajdujących się w jednym katalogu. Czy jest jakiś sposób na zrobienie tego? Próbowałem "git status <katalogu>", ale wygląda na to, że robi to coś zupełnie innego (wymienia wszystkie zmienione pliki, tak jak byłoby, gdybym napisał "git add <katalogu>" pierwszy).status git - czy można wyświetlić zmiany tylko w określonym katalogu?

Dokumentacja dla git-status niewiele mówi, poza tym, że akceptuje te same opcje, co git-commit (ale celem git-commit nie jest pokazywanie list zmienionych plików ...) .

Odpowiedz

144

Z katalogu:

git status . 

Można użyć dowolnego ścieżkę naprawdę należy użyć następującej składni:

git status <directoryPath> 

na przykład do katalogu ze ścieżką "my/fajne/ścieżka/tutaj"

git status my/cool/path/here 
+2

Dzięki! Poza tym wydaje mi się, że "git status " robi to, czego bym się spodziewał - szczerze mówiąc, nie pamiętam, jaki problem miałem z nim wcześniej ... może to kwestia innej wersji git, dunno. –

+0

Nie ma problemu, i prawdopodobnie - nowsze wersje gita wydają się ułatwiać. –

+1

Tak, zachowanie zdecydowanie zmieniło się z 1,6 na 1,7. Spełnia wymagania PO w 1.7, ale 1.6 trwa przez cały okres repozytorium. – colgur

13

Najprostsze rozwiązanie:

  1. Przejdź do katalogu
  2. git status | grep -v '\.\.\/'

Oczywiście to ignoruje kolory.

+0

Love it. Bez dodatków. – redolent

26

Powodem że git status wykonuje te same opcje jak git commit jest, że celem git status jest pokazanie, co by się stało, jeśli popełnione z tych samych opcji jak zdałeś do git status. Pod tym względem git status jest naprawdę git commit --preview.

Aby dostać to, co chcesz, możesz to co pokazuje wystawił zmian zrobić:

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

i to, co pokazuje Unstaged zmiany:

git diff --stat -- <directory_of_interest> 

lub ten, który pokazuje zarówno:

git diff --stat HEAD -- <directory_of_interest> 
+1

To działa częściowo, chociaż nie pokazuje nowo utworzonych (nieśledzonych) plików, takich jak git-status ... –

+0

OK, nie byłem pewien, jakie raporty potrzebujesz. Jeśli chcesz sprawdzić, czy pliki nie są spakowane, wypróbuj 'git ls-files --others ' lub 'ls-files -o'. –

+0

'git ls-files -o' wyświetla rekursywnie pliki w katalogach nieprogramowych, podczas gdy' git status' pokazuje tylko katalog najwyższego poziomu. I trzeba by skomponować wyjście 'git diff',' git ls-files' i odtworzyć całe kodowanie kolorów itp., Które zapewnia 'git status', jeśli ma być zamiennikiem' git status'. Naprawdę bardzo chciałbym znaleźć rozwiązanie tego problemu! –

0

Jako zauważ, jeśli upraszczasz sprawdzanie statystyk git bez przechodzenia do katalogu git;

 
### 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 

Nazywając ten prosty skrypt: gitstat /path/to/foo-project. Możesz go również używać w trybie foo-project po prostu robiąc gitstat ., a więc przypuśćmy, że jest krótszy niż git status -s, git diff --stat lub git diff --stat HEAD, jeśli zawsze używasz konsoli zamiast GUI.

Kredyty:

Powiązane problemy