Czy istnieje sposób, aby automatycznie mieć git submodule update
(lub najlepiej git submodule update --init
dzwonić za każdym razem, gdy git pull
jest to zrobione?
Szukasz ustawienia konfiguracji git lub aliasu git, aby Ci w tym pomóc.
git
git-submodules
philfreo
źródło
źródło
Odpowiedzi:
Począwszy od Gita 2.14 , możesz używać
git pull --recurse-submodules
(i aliasować go na cokolwiek chcesz).Od wersji 2.15 Git można ustawić wartość
submodule.recurse
true, aby umożliwić pożądane zachowanie.Możesz to zrobić globalnie, uruchamiając:
źródło
git pull
również pobranie submodułu i uruchomieniesubmodule update
. To naprawdę musi być teraz zaakceptowana odpowiedźgit config --global submodule.recurse true
git clone
. I włącz to domyślnie. W przeciwnym razie zawsze będzie ogromny opór przed korzystaniem z submodułów, ponieważ moduły ludzi zawsze nie są zsynchronizowane :-(commit
,fetch
,pull
etc.) są przeznaczone do stosowania tylko do aktualnego repozytorium. submoduł jest innym repozytorium i domyślnie nie powinny na niego wpływać polecenia wykonywane w repozytorium nadrzędnym. jest to rodzaj decyzji projektowej autorstwa git-developer.git config --global alias.pullall '!git pull && git submodule update --init --recursive'
Jeśli chcesz przekazać argumenty do git pull, użyj tego zamiast tego:
źródło
Począwszy od wersji 1.7.5 Git powinien automatycznie aktualizować podmoduły, tak jak tego chcesz.
[EDIT: za komentarze: nowy 1.7.5 zachowanie jest do automatycznego pobierania najnowszych zobowiązuje do submodules, ale nie do aktualizować je (w
git submodule update
sensie). Dlatego informacje zawarte w tej odpowiedzi są istotne jako tło, ale same w sobie nie stanowią pełnej odpowiedzi. Nadal potrzebujesz aliasu, aby pobrać i zaktualizować submoduły za pomocą jednego polecenia.]Domyślne zachowanie, „na żądanie”, polega na aktualizacji podmodułów za każdym razem, gdy pobierasz zatwierdzenie, które aktualizuje zatwierdzenie podmodułu, a to zatwierdzenie nie znajduje się jeszcze w lokalnym klonie.
Możesz także aktualizować go przy każdym pobieraniu lub nigdy (zakładam, że zachowanie wcześniejsze niż 1.7.5).
Opcja konfiguracji zmiany tego zachowania to
fetch.recurseSubmodules
.Widzieć:
git config
strona podręcznika (1.7.5) (lub najnowszagit config
strona podręcznika )git fetch
strona man (1.7.5) (lub najnowsza strona man git fetch )po więcej informacji.
źródło
git fetch
, a niegit submodule update
.git pull
, zamiastgit fetch
tej opcji sprawia, że tylko pobieranie rekurencyjne. Nie zmieni to wcale zatwierdzenia zatwierdzonego w podmodułach. Takgit submodule update
jest nadal konieczne, jak zauważył @Artem.Dziwię się, że nikt nie wspominał o używaniu haków git do tego celu!
Po prostu dodaj pliki o nazwach
post-checkout
ipost-merge
do.git/hooks
katalogu odpowiednich repozytoriów i umieść w każdym z nich:Ponieważ konkretnie poprosiłeś o alias, zakładając, że chcesz go mieć dla wielu repozytoriów, możesz utworzyć alias, który doda je do repozytorium
.git/hooks
.źródło
core.hooksPath
dla katalogu hooków ,git-config
więcej informacji można znaleźć w dokumentacji .git pull --rebase
:(Alias, jak sugeruje Kevin Ballard, jest idealnie dobrym rozwiązaniem. Aby rzucić inną opcję, możesz użyć haka po scaleniu, który po prostu działa
git submodule update [--init]
.źródło
Możesz utworzyć alias dla polecenia git, który automatycznie obsługuje aktualizację podmodułów. Dodaj następujące elementy do pliku .bashrc
źródło
Jak wspomnieli inni, możesz to łatwo ustawić za pomocą:
Jednak jeśli jesteś podobny do mnie i masz bardziej złożoną
.gitconfig
konfigurację (mój główny~/.gitconfig
plik używainclude
do ładowania innych.gitconfig
plików) i nigdy nie pamiętasz, jak przekonwertować międzygit
formatem konfiguracji wiersza polecenia a.gitconfig
formatem, oto jak go dodać do dowolnego z twoich.gitconfig
plików:źródło
Jedyny sposób, w jaki udało mi się pobrać submoduły i zagnieżdżone moduły do aktualizacji:
Z powodu nawiasów walczyłem o utworzenie aliasu przez terminal, więc musiałem ręcznie dodać to do .gitconfig dla globalnego:
Wszelkie sugestie dotyczące automatycznego uruchamiania poleceń lub aliasu?
źródło