2009-03-01 11 views
10

Czy ktoś wie z hydrauliką git (na pewno nie porcelany) środki określające, czy:Programowa git stan

  • są zmiany w repo od ostatniego popełnienia, a
  • czy lokalny lider wyprzedza pochodzenie/HEAD

Szukam, aby ustalić to programowo, stąd pragnienie, aby nie rozwiązać tego z porcelany i różnych sed-fu.

Odpowiedz

9

Aktualizacja: jak mentioned below przez toupeira, można skorzystać z opcji git status--porcelain (od popełnienia 6f15787, wrzesień 2009, git 1.7.0).

wspomniałem w mojej odpowiedzi „What does the term porcelain mean in Git?”, że:

Być może sens --porcelain tutaj jest „produkują wyjście nadające się do spożycia przez skrypty porcelany”

jednak, że nie będzie pokaż informacje z wyprzedzeniem/z tyłu:: patrz "What to add to “git status --porcelain” to make it behave like “git status”?": w tym celu potrzebne są jeszcze inne polecenia: patrz "How to know if git repository has changes that have not been synchronized with server?"


odpowiedź Początkowa marca 2009

W poleceniu porcelany, a:

$ git diff HEAD 

daje zmian od ostatniego commit (co można byłoby popełnienie jeśli uruchomić "git commit -a") .

Możliwym równoważne poleceniu wodociągowej będzie:

$ git ls-files -m 

spisywać wszystkie zmodyfikowane (katalog roboczy lub indeks) Pliki


przypadku tworzenia repozytorium przez klonowanie cudzego repozycyjnego, zdalna gałąź "master" jest kopiowana do lokalnego oddziału o nazwie "origin". Otrzymasz własną gałąź "master", która nie jest powiązana ze zdalnym repozytorium.

Zawsze jest obecna głowa, znana jako HEAD. (Właściwie jest to link symboliczny, .git/HEAD, do pliku jak bibl/głowice/Master).

run "stan git" i analizować dane wyjściowe:

# On branch master 
# Your branch is ahead of 'origin/master' by 11 commits. 
# 

Więcej szczegółów w tak pytanie „Why is Git telling me “Your branch is ahead of ‘origin/master’ by 11 commits.” and how do I get it to stop?

Możliwa równoważne poleceniu instalacyjnych:

* git-for-each-ref 

dla listę wszystkich zobowiązuje, ale wymaga analizowania danych wyjściowych, jak również ...

Ponownie, git ls-files could be used to produced the same result than a git status.

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude \ 
        --others \ 
        --modified \ 
        -t 
+0

To świetnie. Dziękuję bardzo. –

+5

"git ls-files --exclude-standard ..." byłoby nieco prostsze. –

2

git status ma teraz --porcelain argumentów dla celów skryptów (jak również alternatywny -z do maszynowego analizowania), to korzystne jest git ls-files który nie wykazuje pliki dodane do indeksu.

+0

Z [dokumentacji dla '--porcelain'] (https://www.kernel.org/pub/software/scm/git/docs/git-status.html):" Podaj dane wyjściowe w łatwy do format parsowania skryptów, podobny do krótkiego wyjścia, ale pozostanie stabilny w wersjach git i niezależnie od konfiguracji użytkownika. " –

+0

Z informacji o wydaniu tego dokumentu nie wynika jednoznacznie, kiedy dodano flagę "--porcelain". –

+0

Znalazłem! Przeszukałem dziennik Git za pomocą 'git log --grep" --porcelain "--date-order', i pokazują, że flaga została dodana w zatwierdzeniu [' 6f15787181a163e158c6fee1d79085b97692ac2f'] (https://github.com/git/ git/commit/6f15787181a163e158c6fee1d79085b97692ac2f) w dniu 5 września 2009. Nawiasem mówiąc, 'tag git - zawiera 6f15787 | sortuj -V | less' ujawnia, że ​​nie zostało to faktycznie wydane w stabilnej wersji do wersji 1.7.0, która była w dniu [12 lutego 2010 r.] (https://github.com/git/git/commit/e923eaeb901ff056421b9007adcbbce271caa7b6). –

Powiązane problemy