Ricerca…


Aggiungere un sottomodulo

Puoi includere un altro repository Git come cartella all'interno del tuo progetto, monitorato da Git:

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

Dovresti aggiungere e salvare il nuovo file .gitmodules ; questo dice a Git quali sottomoduli devono essere clonati quando viene eseguito l' git submodule update .

Clonazione di un repository Git con sottomoduli

Quando cloni un repository che utilizza i sottomoduli, dovrai inizializzarli e aggiornarli.

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

Questo clonerà i sottomodelli referenziati e li colloca nelle cartelle appropriate (inclusi i sottomoduli all'interno dei sottomoduli). Questo è equivalente all'esecuzione git submodule update --init --recursive immediatamente dopo che il clone è finito.

Aggiornamento di un submodulo

Un sottomodulo fa riferimento a un commit specifico in un altro repository. Per verificare lo stato esatto cui si fa riferimento per tutti i sottomoduli, esegui

git submodule update --recursive

A volte invece di utilizzare lo stato a cui si fa riferimento si desidera aggiornare il checkout locale allo stato più recente di quel sottomodulo su un telecomando. Per controllare tutti i sottomoduli allo stato più recente sul telecomando con un singolo comando, puoi usare

git submodule foreach git pull <remote> <branch>

o usa gli argomenti git pull predefiniti

git submodule foreach git pull

Nota che questo aggiornerà solo la tua copia di lavoro locale. L'esecuzione dello git status elencherà la directory del sottomodulo come sporca se modificata a causa di questo comando. Per aggiornare il repository in modo che faccia riferimento al nuovo stato, è necessario eseguire il commit delle modifiche:

git add <submodule_directory>
git commit

Potrebbero esserci alcune modifiche che possono avere unire conflitti se si utilizza git pull modo da poter utilizzare git pull --rebase per riavvolgere le modifiche in alto, il più delle volte diminuisce le probabilità di conflitto. Inoltre tira tutti i rami al locale.

git submodule foreach git pull --rebase

Per controllare lo stato più recente di un sottomodulo specifico, puoi utilizzare:

git submodule update --remote <submodule_directory>

Impostazione di un sottomodulo per seguire un ramo

Un sottomodulo viene sempre controllato a un commit specifico SHA1 (il "gitlink", voce speciale nell'indice del repository padre)

Ma si può richiedere di aggiornare quel sottomodulo all'ultima commit di un ramo del repository remoto del sottomodulo.

Piuttosto che andare in ogni sottomodulo, facendo un git checkout abranch --track origin/abranch, git pull , puoi semplicemente fare (dal repository padre) a:

git submodule update --remote --recursive

Poiché lo SHA1 del sottomodulo cambierebbe, avresti comunque bisogno di seguirlo con:

git add .
git commit -m "update submodules"

Questo suppone che i sottomoduli fossero:

  • o aggiunto con un ramo da seguire:

      git submodule -b abranch -- /url/of/submodule/repo
    
  • o configurato (per un sottomodulo esistente) per seguire un ramo:

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

Rimozione di un sottomodulo

1.8

Puoi rimuovere un sottomodulo (ad es. the_submodule ) chiamando:

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule cancella la voce di the_submodule da .git / config. Questo esclude the_submodule da git submodule update , git submodule sync e git submodule foreach chiama ed elimina il suo contenuto locale (source) . Inoltre, questo non verrà mostrato come modifica nel repository principale. git submodule init e git submodule update ripristinano il sottomodulo, anche in questo caso senza modifiche commettibili nel repository principale.

  • git rm the_submodule rimuoverà il sottomodulo dall'albero di lavoro. I file saranno scomparsi così come la voce dei sottomoduli nel file .gitmodules (source) . Se solo git rm the_submodule (senza il git rm the_submodule git submodule deinit the_submodule precedente git submodule deinit the_submodule viene eseguito, tuttavia, la voce dei sottomoduli nel file .git / config rimarrà.

1.8

Preso da qui :

  1. Elimina la sezione pertinente dal file .gitmodules .
  2. Stage the .gitmodules cambia git add .gitmodules
  3. Elimina la sezione pertinente da .git/config .
  4. Esegui git rm --cached path_to_submodule (nessuna barra finale).
  5. Esegui rm -rf .git/modules/path_to_submodule
  6. Commit git commit -m "Removed submodule <name>"
  7. Elimina i file del sottomodulo ora non tracciati
  8. rm -rf path_to_submodule

Spostare un sottomodulo

1.8

Correre:

$ git mv old/path/to/module new/path/to/module
1.8
  1. Modifica .gitmodules e cambia il percorso del sottomodulo in modo appropriato, e inseriscilo nell'indice con git add .gitmodules .

  2. Se necessario, creare la directory padre della nuova posizione del sottomodulo ( mkdir -p new/path/to ).

  3. Sposta tutto il contenuto dalla vecchia alla nuova directory ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Assicurati che Git tenga traccia di questa directory ( git add new/path /to ).

  5. Rimuovere la vecchia directory con git rm --cached old/path/to/module .

  6. Sposta la directory .git/modules/ old/path/to/module con tutto il suo contenuto in .git/modules/ new/path/to/module .

  7. Modifica il file .git/modules/ new/path/to /config , assicurati che l'elemento worktree punti alle nuove posizioni, quindi in questo esempio dovrebbe essere worktree = ../../../../../ old/path/to/module . In genere dovrebbero esserci altre due .. quindi le directory nel percorso diretto in quel luogo. . Modifica il file new/path/to/module /.git , assicurati che il percorso in esso punti alla nuova posizione corretta all'interno della cartella .git progetto principale, quindi in questo esempio gitdir: ../../../.git/modules/ new/path/to/module .

    git status output dello git status presenta in questo modo in seguito:

     # 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. Alla fine, commetti i cambiamenti.


Questo esempio di Stack Overflow , di Axel Beckert



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow