Sök…


Lägga till en undermodul

Du kan inkludera ett annat Git-arkiv som en mapp i ditt projekt, spårat av Git:

$ git submodule add https://github.com/jquery/jquery.git

Du bör lägga till och begå den nya .gitmodules filen; detta säger Git vilka submoduler som ska klonas när git submodule update körs.

Kloning av ett Git-arkiv med submoduler

När du klonar ett arkiv som använder undermoduler måste du initiera och uppdatera dem.

$ git clone --recursive https://github.com/username/repo.git

Detta kommer att klona de refererade submodulerna och placera dem i lämpliga mappar (inklusive submoduler i submoduler). Detta motsvarar körning av git submodule update --init --recursive omedelbart efter att klonen är klar.

Uppdatera en submodul

En undermodul hänvisar till ett specifikt åtagande i ett annat arkiv. För att kolla in det exakta tillståndet som det hänvisas till för alla undermoduler, kör

git submodule update --recursive

Ibland istället för att använda det tillstånd som det hänvisas till vill du uppdatera till din lokala kassa till det senaste läget för den undermodulen på en fjärrkontroll. För att kolla in alla undermoduler till det senaste tillståndet på fjärrkontrollen med ett enda kommando kan du använda

git submodule foreach git pull <remote> <branch>

eller använd standard- git pull argument

git submodule foreach git pull

Observera att detta bara kommer att uppdatera din lokala arbetskopia. Att köra git status listar katalogen för undermodulen som smutsig om den ändrades på grund av detta kommando. För att uppdatera ditt arkiv för att referera till det nya tillståndet i stället måste du göra ändringarna:

git add <submodule_directory>
git commit

Det kan vara några ändringar du har som kan ha sammanslagningskonflikt om du använder git pull så att du kan använda git pull --rebase att spola tillbaka dina ändringar till toppen, för det mesta minskar chansen för konflikt. Dessutom drar det alla grenar till lokalt.

git submodule foreach git pull --rebase

För att kolla in det senaste tillståndet för en specifik undermodul kan du använda:

git submodule update --remote <submodule_directory>

Ställer in en undermodul för att följa en gren

En undermodul checkas alltid ut vid en specifik engagemang SHA1 ("gitlänken", speciell post i indexet för överordnad repo)

Men man kan begära att uppdatera den undermodulen till den senaste åtagandet från en gren av undermodulens fjärrrepo.

Istället för att gå i varje undermodul, göra en git checkout abranch --track origin/abranch, git pull , kan du helt enkelt göra (från förälderrepo):

git submodule update --remote --recursive

Eftersom undermodulens SHA1 skulle ändras måste du fortfarande följa det med:

git add .
git commit -m "update submodules"

Det antar att undermodulerna var:

  • antingen läggs till med en gren att följa:

      git submodule -b abranch -- /url/of/submodule/repo
    
  • eller konfigurerad (för en befintlig undermodul) för att följa en gren:

      cd /path/to/parent/repo
      git config -f .gitmodules submodule.asubmodule.branch abranch
    

Ta bort en undermodul

1,8

Du kan ta bort en undermodul (t.ex. the_submodule ) genom att ringa:

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule raderar the_submodule s post från .git / config. Detta utesluter_submodulen från git submodule update git submodule sync och git submodule foreach och raderar dess lokala innehåll (källa) . Detta kommer inte att visas som förändring i ditt förälderslager. git submodule init och git submodule update kommer att återställa undermodulen, igen utan trevliga förändringar i ditt överlager.

  • git rm the_submodule bort undermodulen från git rm the_submodule . Filerna kommer att försvinna såväl som undermodulens post i filen .gitmodules (källa) . Om bara git rm the_submodule (utan tidigare git submodule deinit the_submodule körs, kommer emellertid submodulens post i din .git / config-fil att förbli.

1,8

Hämtad härifrån :

  1. Ta bort relevant avsnitt från .gitmodules filen.
  2. .gitmodules ändrar git add .gitmodules
  3. Radera relevant avsnitt från .git/config .
  4. Kör git rm --cached path_to_submodule (inget släpstänk).
  5. Kör rm -rf .git/modules/path_to_submodule
  6. Commit git commit -m "Removed submodule <name>"
  7. Radera de nu ospårade undermodulfilerna
  8. rm -rf path_to_submodule

Flytta en undermodul

1,8

Springa:

$ git mv old/path/to/module new/path/to/module
1,8
  1. Redigera .gitmodules och ändra undermodulens sökväg på lämpligt sätt och lägg den i indexet med git add .gitmodules .

  2. Skapa vid behov moderkatalogen för den nya platsen för undermodulen ( mkdir -p new/path/to ).

  3. Flytta allt innehåll från den gamla till den nya katalogen ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Se till att Git spårar den här katalogen ( git add new/path /to ).

  5. Ta bort den gamla katalogen med git rm --cached old/path/to/module .

  6. Flytta katalogen .git/modules/ old/path/to/module med allt dess innehåll till .git/modules/ new/path/to/module .

  7. Redigera .git/modules/ new/path/to /config filen, se till att arbetsbordsobjektet pekar på de nya platserna, så i det här exemplet ska det vara worktree = ../../../../../ old/path/to/module . Vanligtvis borde det finnas ytterligare två .. sedan kataloger i direktvägen på den platsen. . Redigera filen new/path/to/module /.git , se till att sökvägen i den pekar på rätt ny plats i huvudprojektet .git mappen, så i det här exemplet gitdir: ../../../.git/modules/ new/path/to/module .

    git status statusutgång ser ut så här efteråt:

     # 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. Slutligen begå ändringarna.


Detta exempel från Stack Overflow , av Axel Beckert



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow