Status Gita - czy istnieje sposób, aby pokazać zmiany tylko w określonym katalogu?

136

Chciałbym zobaczyć listę plików zmodyfikowanych od ostatniego zatwierdzenia, jak git statuspokazuje, ale zależy mi tylko na plikach znajdujących się w jednym katalogu. Czy jest na to sposób? Próbowałem git status <directory>, ale wygląda na to, że robi to coś zupełnie innego (wyświetla listę wszystkich zmienionych plików, tak jak by to było, gdybym napisał git add <directory>pierwszy).

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

Kuba Suder
źródło

Odpowiedzi:

199

Z katalogu:

git status .

Naprawdę możesz użyć dowolnej ścieżki, użyj następującej składni:

git status <directoryPath>

Na przykład dla katalogu ze ścieżką „my / cool / path / here”

git status my/cool/path/here
Sam Doidge
źródło
3
Dzięki! Poza tym „git status <directory>” wydaje się robić to, czego bym się spodziewał - szczerze mówiąc, nie pamiętam, jaki miałem z nim wcześniej problem ... może to kwestia innej wersji gita, nie wiem.
Kuba Suder
Żaden problem i prawdopodobnie - nowsze wersje git wydają się ułatwiać.
Sam Doidge
3
Tak, zdecydowanie zmieniło się zachowanie z 1,6 na 1,7. Spełnia wymagania OP w 1.7, ale 1.6 jest kontynuowane przez całe repozytorium.
colgur
31

Powodem, który git statusprzyjmuje te same opcje, git commitjest to, że celem git statusjest pokazanie, co by się stało, gdybyś zatwierdził te same opcje, do których przeszedłeś git status. Pod tym względem git statusjest naprawdęgit commit --preview .

Aby uzyskać to, czego chcesz, możesz zrobić to, co pokazuje zmiany etapowe:

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

i to, co pokazuje zmiany niestacjonarne:

git diff --stat -- <directory_of_interest>

lub to, które pokazuje oba:

git diff --stat HEAD -- <directory_of_interest>
CB Bailey
źródło
2
To częściowo działa, chociaż nie pokazuje nowo utworzonych (nieśledzonych) plików, tak jak robi to git-status ...
Kuba Suder
OK, nie byłem pewien, jakich raportów potrzebujesz. Jeśli chcesz sprawdzić, czy nie ma plików niestabilizowanych, spróbuj git ls-files --others <directory_in_question>lub ls-files -o.
CB Bailey
git ls-files -opokazuje rekursywnie pliki w katalogach poza sceną, podczas gdy git statuspokazuje tylko katalog najwyższego poziomu. I należałoby skomponować git diff, git ls-fileswyprowadzić i odtworzyć wszystkie kodowanie kolorami itp., Które git statuszapewnia, jeśli ma być zamiennikiem git status. Chciałbym też zobaczyć rozwiązanie tego problemu!
Peter V. Mørch
14

Najprostsze rozwiązanie:

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

Oczywiście to odrzuca kolory.

Czy Berk Güder
źródło
W razie potrzeby możesz dodać pewne modyfikacje, aby przywrócić kolor. przykład 1 przykład 2
Carson
2

Uwaga, jeśli uprościsz sprawdzenie statystyk git bez wchodzenia do katalogu git;

### utwórz plik
sudo nano / usr / local / bin / gitstat

### wstaw to

#! / usr / bin / env bash

dir = 1 $

if [[$ dir == ""]]; następnie
    echo "Katalog jest wymagany!"
    wyjście
fi

echo "Statystyka Git dla '$ dir'."

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

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

I wywołanie tego skryptu prosta gitstat /path/to/foo-project. Możesz go również używać podczas foo-projectrobienia, gitstat .więc załóżmy, że jest krótszy niż git status -s, git diff --statlub git diff --stat HEADjeśli zawsze używasz konsoli zamiast GUI.

Kredyty:

K-Gun
źródło