2010-10-07 12 views
22

Podczas make, tworzę pola tekstowe, które zostały osadzone w połączonych wynikach. Bardzo przydatne.Jaki jest łatwy sposób wykrywania zmodyfikowanych plików w obszarze roboczym Git?

Inne niż złożonego sed/grep parsowania polecenia w git status, w jaki sposób można łatwo określić, czy pliki w obszarze roboczym zostały zmodyfikowane zgodnie z git?

+0

Jeśli tylko dbać, aby wiedzieć, czy coś się zmieniło (nie te, które zostały zmienione) patrz [Jak programowo ustalić, czy istnieją uncommited zmiany ?] (http://stackoverflow.com/q/3878624/193688) –

Odpowiedz

24

git ls-files -m

Aby znaleźć ten można przejrza³e¶ git help -a.

+0

To jest idealne. – Jamie

+8

@Jamie: Pliki ze stopniowanymi (ale niezatwierdzonymi) zmianami nie pojawią się z 'git ls-files -m', które mogą być lub nie być tym, co chcesz. –

+1

Ah. Dzięki za wkład. Prawdę mówiąc, 'git ls-files -m' nie jest tym, czego chcę, ale odpowiada na moje konkretne pytanie. +1 dla komentarza i odpowiedzi. – Jamie

17

git status --porcelain wydaje się dawać niezłe wyjście parsable.

+0

Bardzo ładne. Przydadzą się z innych powodów. – Jamie

+0

To świetnie, użyłem go po to, aby zautomatyzować podsumowania commitów Git (tak jak w interfejsie internetowym GitHub), których szukałem w poszukiwaniu: [jedno-liniowe dodawanie, zatwierdzanie i pchanie] (https: // github. com/lmmx/devnotes/wiki/Automated-git-status-summary). –

26

Jeśli chcesz po prostu zwykły „Czy są jakieś różnice w głowie?”:

git diff-index --quiet HEAD 

Jeśli kod wyjścia jest równy 0, to nie było żadnych różnic.

Jeśli chcesz „Jakie pliki zmieniły się od głowy?”:

git diff-index --name-only HEAD 

Jeśli chcesz „Jakie pliki zmieniły się od głowy, w jaki sposób zostały one zmienione (dodane, usunięte, zmienione)? „:

git diff-index --name-status HEAD 

Dodaj -M (i -C) jeśli chcesz zmienić nazwę (i skopiować) wykrywanie.

Te polecenia sprawdzają zarówno zawartość z etapami (co znajduje się w indeksie), jak i pliki w drzewie roboczym. Rozwiązania alternatywne, takie jak git ls-files -m, będą sprawdzać tylko drzewo robocze względem indeksu (to znaczy będą ignorować wszystkie etapowe (ale niezatwierdzone) treści, które również znajdują się w drzewie roboczym).

2

git diff --name-only robi to samo (może być bardziej intuicyjne ...)

Powiązane problemy