2013-04-11 4 views

Odpowiedz

6

Oto dwa sposoby notować "ekstra" zobowiązuje masz które nie są na pochodzenie/master:

git log --oneline origin/master..HEAD 
git rev-list --oneline ^origin/master HEAD 

The --oneline po prostu wyświetla je w krótszym formacie. Ponadto, jeśli twoja gałąź śledzi origin/master, pokaże ci prosty git status.

3
git diff --stat master origin/master 

Przykâadowa:

classes/Mammoth/Article.php           | 12 ++++++++++-- 
classes/Mammoth/Article/Admin/Section/Controller.php     | 34 +++++++++++++++++----------------- 
classes/Mammoth/Article/Filter.php          | 14 +++++++------- 
classes/Mammoth/Article/Section.php         | 18 ++++++++++-------- 
classes/Mammoth/Article/Section/IMySQL.php        | 2 +- 
migrations/20130411111424_ChangeNameToURIOnSectionsTable.php   | 14 -------------- 
migrations/sql/up/20130411111424_ChangeNameToURIOnSectionsTable.sql | 5 ----- 
solr-core/conf/schema.xml            | 2 +- 
views/admin/section/form.php           | 8 ++++---- 
views/admin/section/view.php           | 10 +++++----- 
10 files changed, 55 insertions(+), 64 deletions(-) 
3

Jeśli up-to-date z pobieraniem (coś wszystkich innych odpowiedzi tutaj zakładają również)

$ git checkout 
Your branch is ahead of 'origin/master' by 9 commits. 
    (use "git push" to publish your local commits) 

Aby uzyskać te informacje dla wszystkich oddziałów,

$ git branch -avvv 
+0

Czy to naprawdę potrzebne, aby być na bieżąco z pobieraniem? Ktoś usłyszałby, że mamy nieprzerwane zatwierdzanie, bez względu na to, jak zmieniło się repozytorium z repozytorium. Jedyny wyjątek, jaki mogę wymyślić, to to, czy ktoś przesuwa zestawy zmian do innego węzła, a następnie wypycha zestaw zmian z innego węzła. node i upstream ... teraz upstream jest zsynchronizowany z lokalnym repo, ale bez "pobierania" nie można wiedzieć ... hm :-) – tobixen

+0

@tobixen również wymusił wypychania i odzyskiwania z kopii zapasowej. Jeśli Murphy nie wygląda jak niewinne omijanie pól stokrotek, nie jestem wystarczająco paranoikiem. Wersja obliczeniowa prawa brzmi: "jeśli coś może pójść źle, to już poszło nie tak i chce twojej krwi". – jthill

0

My Pierwsza próba rozwiązania tego problemu wygląda następująco:

git push --all -n 2>&1 | grep -q 'Everything up-to-date' || 
echo "Outstanding commits to be pushed at $PWD" 

Nie jest odporny, ponieważ będzie twierdził, że jest wytrzymały ing popełnia błędy. Największym problemem jest to, że poprosi o podanie nazwy użytkownika/hasła, tj. Jeśli spróbujesz wysłać do repozytorium github za pomocą https-link (zazwyczaj dlatego, że zrobiłem check-check na repo, gdzie nie powinienem bezpośrednio wprowadzać zmian).

Odpowiednia odpowiedź wydaje mi się najbardziej odpowiednia, ponieważ zawiera instrukcje sprawdzania tego dla wszystkich oddziałów. Stąd moja druga próba wygląda następująco:

git branch -avvv 2>&1 | grep -q ': ahead ' && 
    echo "Outstanding commits to be pushed at $PWD" 

to jednak mieć również co najmniej jedno zastrzeżenie - nie będzie fałszywych alarmów czy wiadomość popełnić zawiera ciąg „: zielone światło”.

Więc muszę to polecenie dla „sprawdzić stan wszystkich transakcji repo git”:

for gitrepo in $(find ~ -name '.git') 
do 
    cd $(dirname $gitrepo) 
    git fetch >/dev/null 2>&1 || 
     echo "Git fetch failed at $PWD" 
    git branch -avvv 2>&1 | grep -q ': ahead ' && 
     echo "Outstanding commits to be pushed at $PWD" 
done 

:-)