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

1.8

Możesz usunąć submoduł (np. the_submodule ), wywołując:

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule usuwa the_submodule z .git / config. Wyklucza to git submodule update git submodule sync i git 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 i git 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 tylko git rm the_submodule (bez wcześniejszego git rm the_submodule git submodule deinit the_submodule zostanie uruchomiony, git submodule deinit the_submodule jednak wpis submodułów w pliku .git / config.

1.8

Zaczerpnięte stąd :

  1. Usuń odpowiednią sekcję z pliku .gitmodules .
  2. Etap zmiany .gitmodules git add .gitmodules
  3. Usuń odpowiednią sekcję z .git/config .
  4. Uruchom git rm --cached path_to_submodule (bez końcowego ukośnika).
  5. Uruchom polecenie rm -rf .git/modules/path_to_submodule
  6. Zatwierdź git commit -m "Removed submodule <name>"
  7. Usuń nieśledzone pliki submodułów
  8. rm -rf path_to_submodule

Przenoszenie submodułu

1.8

Biegać:

$ git mv old/path/to/module new/path/to/module
1.8
  1. Edytuj .gitmodules i odpowiednio zmień ścieżkę submodułu i umieść go w indeksie za pomocą git add .gitmodules .

  2. W razie potrzeby utwórz katalog nadrzędny nowej lokalizacji submodułu ( mkdir -p new/path/to ).

  3. Przenieś całą zawartość ze starego do nowego katalogu ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Upewnij się, że Git śledzi ten katalog ( git add new/path /to ).

  5. Usuń stary katalog za pomocą git rm --cached old/path/to/module .

  6. Przenieś katalog .git/modules/ old/path/to/module z całą zawartością do .git/modules/ new/path/to/module .

  7. 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
     #
    
  8. 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