Come posso controllare una versione specifica di un sottomodulo utilizzando "git submodule"?


Risposte:


167

I repository dei sottomoduli rimangono in uno stato HEAD scollegato che punta a un commit specifico. La modifica di quel commit implica semplicemente l'estrazione di un tag o commit diverso, quindi l'aggiunta della modifica al repository genitore.

$ cd submodule
$ git checkout v2.0
Previous HEAD position was 5c1277e... bumped version to 2.0.5
HEAD is now at f0a0036... version 2.0

git-status sul repository genitore ora riporterà un albero sporco:

# On branch dev [...]
#
#   modified:   submodule (new commits)

Aggiungere la directory del sottomodulo e impegnarsi a memorizzare il nuovo puntatore.


14
Dopo aver eseguito il commit del repository principale con uno specifico ramo / versione di un sottomodulo, altri possono eseguire il checkout della stessa versione del sottomodulo in futuro? Oppure devono essere specificati di nuovo manualmente?
QZHua

@QZHua: l'ho sperimentato io stesso e sembra che l'ID commit del sottomodulo venga conservato quando il genitore viene clonato.
Psiconauta

37

Passaggio 1: aggiungi il sottomodulo

   git submodule add git://some_repository.git some_repository

Passaggio 2: correggi il sottomodulo a un commit particolare

Per impostazione predefinita, il nuovo sottomodulo terrà traccia di HEAD del ramo master, ma NON verrà aggiornato quando aggiorni il tuo repository principale. Per cambiare il sottomodulo per tenere traccia di un particolare commit o di un ramo diverso, cambia la directory nella cartella del sottomodulo e cambia i rami proprio come faresti in un normale repository.

   git checkout -b some_branch origin/some_branch

Ora il sottomodulo è fissato sul ramo di sviluppo invece che su HEAD del master.

Da due ragazzi che litigano: lega i sottomoduli Git a un particolare impegno o ramo .


20
È più facile da usaregit submodule add -b some_branch git://some_repository.git some_repository
Caumons

15
In questo momento non sembra che git submodule add -bpossa prendere un tag o uno sha1hash. Può solo prendere un ramo.
CMCDragonkai

C'è un problema per questo nel tracker dei problemi di Git? Qualcuno potrebbe gentilmente pubblicare un URL in modo che possiamo seguirlo? Grazie.
colan

Le istruzioni di @colan per la segnalazione di bug si trovano su git-scm.com/community . Ma -bil supporto di branch e non tag o commit shas è una funzionalità non un bug (in effetti -bè una scorciatoia per --branch).
henry

1
Sospiro. Dopo tutti questi anni, non hanno ancora un rilevatore di problemi pubblici.
colan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.