2013-04-16 9 views
7

Pracuję z niestandardowym systemem kompilacji, który zarządza dużą liczbą repozytoriów git i jest napisany przede wszystkim w Pythonie.Najprostszy możliwy sposób, w jaki git może generować liczbę zatwierdzeń między "branch" i "remote/origin/branch"

Zaoszczędziłoby mi to dużo czasu, gdybym mógł napisać polecenie, które zgłosiłoby bieżącą gałąź wszystkich repozytoriów, a następnie zgłosić, czy szef "oddziału" jest taki sam jak szef "zdalnych/pochodzenia/gałęzi ".

Mamy już polecenie, które uruchomi komendę powłoki wewnątrz każdego repozytorium git, czego szukam, to metoda uzyskania po prostu sformatowanej informacji z git w odniesieniu do względnej pozycji gałęzi i pilotów/pochodzenia/gałąź. Coś, co będzie albo liczbą różnicy zobowiązań, albo prostą wartością boolowską.

Jaka jest metoda uzyskiwania tych informacji z git, który ma zminimalizować ilość przetwarzania i przetwarzania, które muszę zrobić po stronie Pythona?

Odpowiedz

1

git status pokazuje, ile zatwierdzeń znajduje się przed/za zdalnym odgałęzieniem śledzenia. Najpierw jednak musisz wykonać git fetch, ponieważ w przeciwnym razie git nie będzie wiedział, czy coś nowego przeszło w tryb zdalny.

1

Jeśli branch jest zapewniona za przodka origin/branch (czyli szybko, którego przesłanie), następnie

git log --oneline branch..origin/branch 

należy wydrukować zobowiązuje pomiędzy nimi, każdy w jednej linii. Możesz liczyć linie w pythonie lub wc -l.

Nie jestem pewien, czy istnieje proste i ogólne rozwiązanie. Być może nie ma wspólnego przodka dla origin/branch i branch, jeśli dotyczy to gałęzi gałęzi.

18

Jeśli masz wystarczająco dużo nowej wersji git, można użyć:

$ git rev-list --count --left-right branch...origin/branch 
2 1 

Pierwszy numer, jeżeli liczba zmian są branch wyprzedza origin/branch, a drugi to liczba popełnia tyle. Tak więc ta gałąź ma dwa zatwierdzenia, które nie są jeszcze dostępne, i jest jeszcze jedno zatwierdzenie, które nie jest jeszcze w moim lokalnym oddziale.

Wydaje mi się, że po wprowadzeniu konta -count było 1,6 lub 1,7.

Powiązane problemy