Git
submodules
Zoeken…
Een submodule toevoegen
Je kunt een andere Git-repository als map in je project opnemen, bijgehouden door Git:
$ git submodule add https://github.com/jquery/jquery.git
U moet het nieuwe .gitmodules
bestand toevoegen en vastleggen; dit vertelt Git welke submodules moeten worden gekloond wanneer de git submodule update
wordt uitgevoerd.
Een Git-repository met submodules klonen
Wanneer u een repository clone die submodules gebruikt, moet u deze initialiseren en bijwerken.
$ git clone --recursive https://github.com/username/repo.git
Hiermee worden de submodules waarnaar wordt verwezen gekloond en in de juiste mappen geplaatst (inclusief submodules in submodules). Dit komt overeen met het uitvoeren van git submodule update --init --recursive
onmiddellijk nadat de kloon is voltooid.
Een submodule bijwerken
Een submodule verwijst naar een specifieke commit in een andere repository. Als u de exacte status wilt controleren waarnaar wordt verwezen voor alle submodules, voert u uit
git submodule update --recursive
Soms wilt u in plaats van de status waarnaar wordt verwezen, uw lokale kassa bijwerken naar de nieuwste status van die submodule op een afstandsbediening. U kunt met één opdracht alle submodules naar de nieuwste status op de afstandsbediening bekijken
git submodule foreach git pull <remote> <branch>
of gebruik de standaard git pull
argumenten
git submodule foreach git pull
Merk op dat dit gewoon uw lokale werkkopie bijwerkt. Als je git status
wordt de submodule-directory als vies weergegeven als deze is gewijzigd vanwege deze opdracht. Om in plaats daarvan uw repository bij te werken om naar de nieuwe status te verwijzen, moet u de wijzigingen doorvoeren:
git add <submodule_directory>
git commit
Er kunnen enkele wijzigingen zijn die conflicten kunnen hebben als je git pull
zodat je git pull
kunt gebruiken git pull --rebase
om je wijzigingen naar boven terug te spoelen, meestal vermindert dit de kans op conflicten. Ook trekt het alle takken naar lokaal.
git submodule foreach git pull --rebase
Om de laatste status van een specifieke submodule af te rekenen, kunt u het volgende gebruiken:
git submodule update --remote <submodule_directory>
Een submodule instellen om een tak te volgen
Een submodule wordt altijd uitgecheckt bij een specifieke commit SHA1 (de "gitlink", speciale vermelding in de index van de bovenliggende repo)
Maar men kan vragen om die submodule bij te werken naar de laatste commit van een tak van de submodule externe repo.
In plaats van in elke submodule te gaan, een git checkout abranch --track origin/abranch, git pull
, kun je eenvoudig doen (vanuit de ouder-repo) een:
git submodule update --remote --recursive
Omdat de SHA1 van de submodule zou veranderen, zou je dat nog moeten volgen met:
git add .
git commit -m "update submodules"
Dat veronderstelt dat de submodules waren:
ofwel toegevoegd met een tak om te volgen:
git submodule -b abranch -- /url/of/submodule/repo
of geconfigureerd (voor een bestaande submodule) om een tak te volgen:
cd /path/to/parent/repo git config -f .gitmodules submodule.asubmodule.branch abranch
Een submodule verwijderen
Je kunt een submodule (bijv. the_submodule
) verwijderen door te bellen naar:
$ git submodule deinit the_submodule
$ git rm the_submodule
git submodule deinit the_submodule
schraptthe_submodule
s'vermelding uit .git / config. Dit sluit de_submodule uit vangit submodule update
,git submodule sync
engit submodule foreach
en verwijdert zijn lokale inhoud (bron) . Ook wordt dit niet getoond als verandering in uw bovenliggende repository.git submodule init
engit submodule update
zullen de submodule herstellen, opnieuw zonder vastlegbare wijzigingen in je bovenliggende repository.git rm the_submodule
zal de submodule uit degit rm the_submodule
verwijderen. De bestanden zijn verdwenen evenals de invoer van de submodules in het.gitmodules
bestand (bron) . Als alleengit rm the_submodule
(zonder voorafgaandegit submodule deinit the_submodule
wordt uitgevoerd, blijft het item van de submodules in je .git / config-bestand behouden.
- Verwijder de relevante sectie uit het
.gitmodules
bestand. - Stage de
.gitmodules
verandertgit add .gitmodules
- Verwijder de relevante sectie uit
.git/config
. - Voer
git rm --cached path_to_submodule
(geen slash). - Voer
rm -rf .git/modules/path_to_submodule
- Commit
git commit -m "Removed submodule <name>"
- Verwijder de nu niet-bijgehouden submodulebestanden
-
rm -rf path_to_submodule
Een submodule verplaatsen
Rennen:
$ git mv old/path/to/module new/path/to/module
1.8 Bewerk .gitmodules
en verander het pad van de submodule op de juiste manier, en plaats het in de index met git add .gitmodules
.
Maak indien nodig de bovenliggende map van de nieuwe locatie van de submodule ( mkdir -p new/path/to
).
Verplaats alle inhoud van de oude naar de nieuwe map ( mv -vi old/path/to/module new/path/to/submodule
).
Zorg ervoor dat Git deze map git add new/path /to
( git add new/path /to
).
Verwijder de oude map met git rm --cached old/path/to/module
.
Verplaats de map .git/modules/ old/path/to/module
met alle inhoud naar .git/modules/ new/path/to/module
.
Bewerk het .git/modules/ new/path/to /config
bestand, zorg ervoor dat werkboomitem naar de nieuwe locaties verwijst, dus in dit voorbeeld moet het worktree = ../../../../../ old/path/to/module
. Normaal gesproken zouden er nog twee ..
dan mappen in het directe pad op die plaats moeten zijn. . Bewerk het bestand new/path/to/module /.git
, zorg ervoor dat het pad erin naar de juiste nieuwe locatie in de map .git
het hoofdproject .git
, dus in dit voorbeeld gitdir: ../../../.git/modules/ new/path/to/module
.
git status
output ziet er achteraf als volgt uit:
# 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
#
Leg ten slotte de wijzigingen vast.
Dit voorbeeld van Stack Overflow , van Axel Beckert
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow