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

1.8

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 schrapt the_submodule s'vermelding uit .git / config. Dit sluit de_submodule uit van git submodule update , git submodule sync en git submodule foreach en verwijdert zijn lokale inhoud (bron) . Ook wordt dit niet getoond als verandering in uw bovenliggende repository. git submodule init en git submodule update zullen de submodule herstellen, opnieuw zonder vastlegbare wijzigingen in je bovenliggende repository.

  • git rm the_submodule zal de submodule uit de git rm the_submodule verwijderen. De bestanden zijn verdwenen evenals de invoer van de submodules in het .gitmodules bestand (bron) . Als alleen git rm the_submodule (zonder voorafgaande git submodule deinit the_submodule wordt uitgevoerd, blijft het item van de submodules in je .git / config-bestand behouden.

1.8

Hier vandaan genomen :

  1. Verwijder de relevante sectie uit het .gitmodules bestand.
  2. Stage de .gitmodules verandert git add .gitmodules
  3. Verwijder de relevante sectie uit .git/config .
  4. Voer git rm --cached path_to_submodule (geen slash).
  5. Voer rm -rf .git/modules/path_to_submodule
  6. Commit git commit -m "Removed submodule <name>"
  7. Verwijder de nu niet-bijgehouden submodulebestanden
  8. rm -rf path_to_submodule

Een submodule verplaatsen

1.8

Rennen:

$ git mv old/path/to/module new/path/to/module
1.8
  1. Bewerk .gitmodules en verander het pad van de submodule op de juiste manier, en plaats het in de index met git add .gitmodules .

  2. Maak indien nodig de bovenliggende map van de nieuwe locatie van de submodule ( mkdir -p new/path/to ).

  3. Verplaats alle inhoud van de oude naar de nieuwe map ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Zorg ervoor dat Git deze map git add new/path /to ( git add new/path /to ).

  5. Verwijder de oude map met git rm --cached old/path/to/module .

  6. Verplaats de map .git/modules/ old/path/to/module met alle inhoud naar .git/modules/ new/path/to/module .

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