2013-02-27 9 views
14

Mam repozytorium git z wieloma submodułami. Jeden z tych submodułów ma wiele podmoduł własnych. Wszystko, co zamierzam zrobić, to sprawdzenie starego zatwierdzenia na głównym repozytorium i zlecenie mu wykonania odpowiednich zatwierdzeń ze wszystkich submodułów w celu uzyskania prawidłowego stanu kodu w tym czasie.Jak kasować stare rekordy git, w tym rekursywnie wszystkie podmoduły?

Wiem, że git zawiera informacje niezbędne, ponieważ polecenie ls-tree może mi powiedzieć, które zatwierdzenie każdego modułu jest włączone. Muszę jednak ręcznie sprawdzić każdy z nich, co jest czasochłonne.

Szukam czegoś takiego jak git checkout --recursive, ale takie polecenie wydaje się nie istnieć.

Czy jest to w ogóle możliwe?

+0

Uwaga: 'git checkout --recurse-submoduły' faktycznie istnieje obecnie (2017). Ale dopiero nadchodzący Git 2.14 sprawi, że będzie działał poprawnie. Zobacz [moja odpowiedź poniżej] (https://stackoverflow.com/a/44249558/6309). – VonC

Odpowiedz

17

Trzeba dwa polecenia do osiągnięcia tego celu:

git checkout *oldcommit* 
git submodule update --recursive 
+1

Dziękuję bardzo! Oczywiście okazało się to czymś prostym. –

4

W zależności od tego, czy istnieje więcej Submoduły w starej kasie, może trzeba wykonać następujące czynności, aby zainicjować submodules, że nie ma nic więcej w nowe rewizje:

git checkout *oldcommit* 
git submodule init 
git submodule update --recursive 
6

Uwaga: jeśli masz wiele submodules (i submodules wewnątrz submodules), Git 2,14 (Q3 2017) pomogą (nowsza że PO z 2013 roku)

git checkout --recurse-submodules 

Użycie --recurse-submodules zaktualizuje zawartość wszystkich zainicjowanych submodułów zgodnie z zatwierdzeniem zapisanym w superzprojektie.
Jeśli lokalne modyfikacje w module częściowym zostaną nadpisane, zamówienie się nie powiedzie, o ile nie zostanie użyte -f.

git checkout --recurse-submodules” nie dość pracy z modułem, który sam ma submodules. Będzie z Git 2.14.

+0

Nie rozumiem, dlaczego '-f' jest zawsze konieczne. Bez '-f' nie aktualizuje submodułów. – linquize

+0

@linquize '-f' powinno być konieczne tylko, jeśli masz jakąś lokalną modyfikację w module. – VonC

Powiązane problemy