Szukaj…
Dodanie submodułu
Możesz dołączyć inne repozytorium Git jako folder w swoim projekcie, śledzony przez Git:
$ git submodule add https://github.com/jquery/jquery.git
Powinieneś dodać i zatwierdzić nowy plik .gitmodules
; informuje to Git, które podmoduły powinny zostać sklonowane po uruchomieniu git submodule update
.
Klonowanie repozytorium Git z podmodułami
Po sklonowaniu repozytorium, które korzysta z submodułów, musisz je zainicjować i zaktualizować.
$ git clone --recursive https://github.com/username/repo.git
Spowoduje to sklonowanie podmodułów, do których istnieją odniesienia, i umieszczenie ich w odpowiednich folderach (w tym podmodułach w ramach podmodułów). Jest to równoważne z uruchomieniem git submodule update --init --recursive
natychmiast po zakończeniu klonowania.
Aktualizacja podmodułu
Podmoduł odwołuje się do konkretnego zatwierdzenia w innym repozytorium. Aby sprawdzić dokładny stan, do którego odnoszą się wszystkie podmoduły, uruchom
git submodule update --recursive
Czasami zamiast używać stanu, do którego się odwołujesz, chcesz zaktualizować do lokalnej kasy do najnowszego stanu tego podmodułu na pilocie. Aby sprawdzić wszystkie podmoduły do najnowszego stanu na pilocie za pomocą jednego polecenia, możesz użyć
git submodule foreach git pull <remote> <branch>
lub użyj domyślnych argumentów git pull
git submodule foreach git pull
Pamiętaj, że spowoduje to jedynie aktualizację lokalnej kopii roboczej. Uruchomienie git status
spowoduje wyświetlenie katalogu podmodułu jako brudnego, jeśli zmienił się z powodu tego polecenia. Aby zamiast tego zaktualizować repozytorium, aby odwoływało się do nowego stanu, musisz zatwierdzić zmiany:
git add <submodule_directory>
git commit
Mogą wystąpić pewne zmiany, które mogą powodować konflikt scalania, jeśli używasz git pull
więc możesz użyć git pull --rebase
aby przewinąć zmiany do góry, przez większość czasu zmniejsza to prawdopodobieństwo konfliktu. Również przyciąga wszystkie gałęzie do lokalnych.
git submodule foreach git pull --rebase
Aby sprawdzić najnowszy stan określonego submodułu, możesz użyć:
git submodule update --remote <submodule_directory>
Ustawienie submodułu, aby podążał za gałęzią
Podmoduł jest zawsze sprawdzany w określonym zatwierdzeniu SHA1 („gitlink”, specjalny wpis w indeksie repozytorium nadrzędnego)
Można jednak poprosić o aktualizację tego submodułu do najnowszego zatwierdzenia gałęzi zdalnego repozytorium submodułu.
Zamiast wchodzić do każdego podmodułu, wykonując git checkout abranch --track origin/abranch, git pull
, możesz po prostu zrobić (z repozytorium nadrzędnego):
git submodule update --remote --recursive
Ponieważ SHA1 podmodułu zmieniłby się, nadal musisz postępować zgodnie z:
git add .
git commit -m "update submodules"
To zakłada, że submoduły to:
albo dodany z odgałęzieniem do naśladowania:
git submodule -b abranch -- /url/of/submodule/repo
lub skonfigurowane (dla istniejącego podmodułu), aby podążało za gałęzią:
cd /path/to/parent/repo git config -f .gitmodules submodule.asubmodule.branch abranch
Usuwanie submodułu
Możesz usunąć submoduł (np. the_submodule
), wywołując:
$ git submodule deinit the_submodule
$ git rm the_submodule
git submodule deinit the_submodule
usuwathe_submodule
z .git / config. Wyklucza togit submodule update
git submodule sync
igit submodule foreach
wywołaniami i usuwa jego zawartość lokalną (źródło) . Nie będzie to również wyświetlane jako zmiana w repozytorium nadrzędnym.git submodule init
igit submodule update
przywrócą submoduł, ponownie bez zmian w repozytorium nadrzędnym.git rm the_submodule
usunie submoduł z drzewa roboczego. Pliki znikną, podobnie jak wpis submodułów w pliku.gitmodules
(źródło) . Jeśli tylkogit rm the_submodule
(bez wcześniejszegogit rm the_submodule
git submodule deinit the_submodule
zostanie uruchomiony,git submodule deinit the_submodule
jednak wpis submodułów w pliku .git / config.
Zaczerpnięte stąd :
- Usuń odpowiednią sekcję z pliku
.gitmodules
. - Etap zmiany
.gitmodules
git add .gitmodules
- Usuń odpowiednią sekcję z
.git/config
. - Uruchom
git rm --cached path_to_submodule
(bez końcowego ukośnika). - Uruchom polecenie
rm -rf .git/modules/path_to_submodule
- Zatwierdź
git commit -m "Removed submodule <name>"
- Usuń nieśledzone pliki submodułów
-
rm -rf path_to_submodule
Przenoszenie submodułu
Biegać:
$ git mv old/path/to/module new/path/to/module
1.8 Edytuj .gitmodules
i odpowiednio zmień ścieżkę submodułu i umieść go w indeksie za pomocą git add .gitmodules
.
W razie potrzeby utwórz katalog nadrzędny nowej lokalizacji submodułu ( mkdir -p new/path/to
).
Przenieś całą zawartość ze starego do nowego katalogu ( mv -vi old/path/to/module new/path/to/submodule
).
Upewnij się, że Git śledzi ten katalog ( git add new/path /to
).
Usuń stary katalog za pomocą git rm --cached old/path/to/module
.
Przenieś katalog .git/modules/ old/path/to/module
z całą zawartością do .git/modules/ new/path/to/module
.
Edytuj plik .git/modules/ new/path/to /config
, upewnij się, że element worktree wskazuje nowe lokalizacje, więc w tym przykładzie powinien to być worktree = ../../../../../ old/path/to/module
. Zwykle nie powinno być dwa więcej ..
następnie katalogi w bezpośredniej ścieżki w tym miejscu. . Zmodyfikuj plik new/path/to/module /.git
, upewnij się, że ścieżka w nim wskazuje poprawną nową lokalizację w folderze .git
głównego projektu, więc w tym przykładzie gitdir: ../../../.git/modules/ new/path/to/module
.
Wyjście git status
wygląda następująco:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: .gitmodules
# renamed: old/path/to/submodule -> new/path/to/submodule
#
Na koniec zatwierdz zmiany.
Ten przykład z Stack Overflow autorstwa Axela Beckerta
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow