Mam projekt A, który jest biblioteką i jest używany w projekcie B.
Oba projekty A i B mają osobne repozytorium na github ALE wewnątrz B mamy podmoduł A.
Edytowałem niektóre klasy w bibliotece, która znajduje się w repozytorium A, włączyłem zdalne repozytorium, więc biblioteka (repozytorium A) została zaktualizowana.
Te aktualizacje nie odzwierciedlają „odniesienia” (podmoduł), który podmoduł odnosi się do poprzedniego zatwierdzenia .... co powinienem zrobić, aby zaktualizować podmoduł na git?
źródło
git submodule update
gdy ktoś inny zaktualizował projA (dostaniesz nowy identyfikator zatwierdzenia).git push
?git push <remote> <branch>
npgit push origin dev
.git submodule update
działa tylko bez flag, gdy wyciągnięto zatwierdzenie (w pro B), które aktualizuje odnośniki do danego podmodułu (proj A). Aby zaktualizować proj B, aby odwoływał sięHEAD
do gałęzi zdalnego śledzenia dla proj A, zrób to tak,git submodule update --remote --merge
jak pokazano w odpowiedzi Paula Hatchera poniżej.Od wersji 1.8 możesz to zrobić
Spowoduje to zaktualizowanie submodułu do najnowszego zdalnego zatwierdzenia. Następnie musisz zatwierdzić zmianę, aby gitlink w repozytorium nadrzędnym został zaktualizowany
A następnie pchnij zmiany, ponieważ bez tego tożsamość SHA-1 wskazująca na podmoduł nie zostanie zaktualizowana, więc zmiana nie będzie widoczna dla nikogo innego.
źródło
git commit
wszyscy inni nadal tego nie widzą.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
przed zatwierdzeniem.Jeśli zaktualizujesz podmoduł i zatwierdzisz go, musisz przejść do repozytorium zawierającego lub wyższego poziomu i tam dodać zmianę.
pokaże coś takiego:
Fakt, że podmoduł nie jest zsynchronizowany, można również zauważyć
wynik pokaże:
Znak plus wskazuje, że twój podmoduł wskazuje miejsce, w którym oczekuje najwyższego repozytorium.
po prostu dodaj tę zmianę:
i popełnij to:
Kiedy przesuwasz swoje zmiany, upewnij się, że najpierw przesuwasz zmiany w submodule, a następnie wypychasz zmianę odniesienia w zewnętrznym repozytorium. W ten sposób osoby, które dokonają aktualizacji, zawsze będą mogły pomyślnie uruchomić
Więcej informacji na temat submodułów można znaleźć tutaj http://progit.org/book/ch6-6.html .
źródło
+
po uruchomieniu nie widziszgit submodule
, upewnij się, że zainicjalizowałeś i zaimportowałeś podmoduły. Polecenia, które sągit submodule init
igit submodule update
, odpowiednio.Wersja jednoliniowa
źródło
Kilka innych odpowiedzi zaleca scalenie / zatwierdzenie w katalogu podmodułu, co IMO może stać się nieco nieporządne.
Zakładając, że serwer zdalny jest nazwany
origin
i chcemymaster
gałęzi submodułów, zwykle używam:git submodule foreach "git fetch && git reset --hard origin/master"
Uwaga: Wykona to twardy reset każdego podmodułu - jeśli tego nie chcesz, możesz zmienić
--hard
na--soft
.źródło
Mój projekt powinien wykorzystywać „najnowsze” dla submodułu. W systemie Mac OSX 10.11, git w wersji 2.7.1, nie musiałem wchodzić do folderu podmodułu, aby zbierać zatwierdzenia. Po prostu robiłem regularnie
na najwyższym poziomie i poprawnie zaktualizował mój podmoduł.
źródło
Odpowiedź Andy'ego działała na mnie, uciekając przed $ path:
źródło
'$path'