2011-08-30 2 views
15

Supponendo che il seguente layout del progetto: -intesa git modulo e "congelamento" in un secondo specifica commettere hash o versione

mainrepo_git 
    |____ .git 
    |____ .gitmodules 
    |____ proj   <------- directory containing the code files for mainrepo 
      |____ 3rdpartysourcecode <-- directory containing upstream open source code 
      |  |____ .git 
      |  |____ 3rdpartyfiles 
      | 
      |____ mainrepofilesanddirectories 

mainrepo_git contiene il codice sorgente sono direttamente responsabili. Ho accesso in lettura/scrittura e posso spingere e tirare direttamente a un repository git remoto che gestisco.

nidificato all'interno mainrepo_git è una directory che ho chiamato 3rdpartysourcecode. Questa directory 3rdpartysourcecode è in realtà un altro git repo (noto anche come "sottomodulo git") che punta a un repository git di terze parti open source gestito da altri sviluppatori. Ho solo accesso in lettura ad esso. Nessun accesso in scrittura.

C'è un modo per "congelare" uno specifico hash di commit del sottomodulo git in relazione a un commit effettuato nel mio repository principale?

Per esempio, se io sono in (o io tornare ad) impegnarsi a12ucak nel mio mainrepo, il mio git modulo anche viene ripristinato una versione specifica, che lego a commettere a12ucak? E quando passo a commit b349jdsak, il mio sottomodulo git viene anche ripristinato a una versione che leggo a b349jdsak?

Quindi la mia domanda è: c'è un modo per creare un collegamento tra uno specifico commit nel repository principale con un commit corrispondente nel sottomodulo git? In questo modo, quando eseguo il checkout di uno specifico commit nel repository git principale, verrà eseguito il checkout anche il corrispondente commit nel sottomodulo git.

risposta

11

Il congelamento è l'intero punto dei sottomoduli. Dovresti davvero leggere un tutorial su di esso. In poche parole, git add 3rdpartysourcecode (importante senza barra finale!) Seguito da un commit blocca il commit del sottomodulo attualmente controllato al commit della supermodule. Quindi in seguito si utilizza git submodule update per verificare la revisione.

+2

Corretto. Vedi anche http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194 – VonC