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/repoof 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_submoduleschraptthe_submodules'vermelding uit .git / config. Dit sluit de_submodule uit vangit submodule update,git submodule syncengit submodule foreachen verwijdert zijn lokale inhoud (bron) . Ook wordt dit niet getoond als verandering in uw bovenliggende repository.git submodule initengit submodule updatezullen de submodule herstellen, opnieuw zonder vastlegbare wijzigingen in je bovenliggende repository.git rm the_submodulezal de submodule uit degit rm the_submoduleverwijderen. De bestanden zijn verdwenen evenals de invoer van de submodules in het.gitmodulesbestand (bron) . Als alleengit rm the_submodule(zonder voorafgaandegit submodule deinit the_submodulewordt uitgevoerd, blijft het item van de submodules in je .git / config-bestand behouden.
- Verwijder de relevante sectie uit het
.gitmodulesbestand. - Stage de
.gitmodulesverandertgit 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 Bewerk
.gitmodulesen verander het pad van de submodule op de juiste manier, en plaats het in de index metgit 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/modulemet alle inhoud naar.git/modules/ new/path/to/module.Bewerk het
.git/modules/ new/path/to /configbestand, zorg ervoor dat werkboomitem naar de nieuwe locaties verwijst, dus in dit voorbeeld moet hetworktree = ../../../../../ old/path/to/module. Normaal gesproken zouden er nog twee..dan mappen in het directe pad op die plaats moeten zijn. . Bewerk het bestandnew/path/to/module /.git, zorg ervoor dat het pad erin naar de juiste nieuwe locatie in de map.githet hoofdproject.git, dus in dit voorbeeldgitdir: ../../../.git/modules/ new/path/to/module.git statusoutput 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