Git
sottomoduli
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
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 dithe_submodule
da .git / config. Questo esclude the_submodule dagit submodule update
,git submodule sync
egit submodule foreach
chiama ed elimina il suo contenuto locale (source) . Inoltre, questo non verrà mostrato come modifica nel repository principale.git submodule init
egit 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 sologit rm the_submodule
(senza ilgit rm the_submodule
git submodule deinit the_submodule
precedentegit submodule deinit the_submodule
viene eseguito, tuttavia, la voce dei sottomoduli nel file .git / config rimarrà.
Preso da qui :
- Elimina la sezione pertinente dal file
.gitmodules
. - Stage the
.gitmodules
cambiagit add .gitmodules
- Elimina la sezione pertinente da
.git/config
. - Esegui
git rm --cached path_to_submodule
(nessuna barra finale). - Esegui
rm -rf .git/modules/path_to_submodule
- Commit
git commit -m "Removed submodule <name>"
- Elimina i file del sottomodulo ora non tracciati
-
rm -rf path_to_submodule
Spostare un sottomodulo
Correre:
$ git mv old/path/to/module new/path/to/module
1.8 Modifica .gitmodules
e cambia il percorso del sottomodulo in modo appropriato, e inseriscilo nell'indice con git add .gitmodules
.
Se necessario, creare la directory padre della nuova posizione del sottomodulo ( mkdir -p new/path/to
).
Sposta tutto il contenuto dalla vecchia alla nuova directory ( mv -vi old/path/to/module new/path/to/submodule
).
Assicurati che Git tenga traccia di questa directory ( git add new/path /to
).
Rimuovere la vecchia directory con git rm --cached old/path/to/module
.
Sposta la directory .git/modules/ old/path/to/module
con tutto il suo contenuto in .git/modules/ new/path/to/module
.
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
#
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