Si consiglia di esaminare il supporto di Git submodule. Un submodule ti consente di incorporare un repository git all'interno di un altro repository git. Ci sono alternative solutions per questo genere di cose, ma non li ho usati da solo.
Un esempio potrebbe essere simile a questo:
$ git clone git://github.com/username/project.git
$ cd project
$ git submodule add git://github.com/username/framework.git framework
$ git commit -m "added framework submodule"
Se si sta copiando un repository con sottomoduli, è necessario utilizzare l'opzione --recursive
:
$ git clone --recursive git://<repository-with-submodules>.git
Oppure, in alternativa, è possibile clonare regolarmente e quindi eseguire:
$ git submodule init
$ git submodule update
Leggere il documento collegato (e git submodule --help
) per ulteriori informazioni.
Se vengono apportate modifiche al modulo, è portarli in questo modo:
# first update the submodule just like any other git repository
$ cd project/framework
$ git pull
# now you have to record the new commit in the parent repository
$ cd ..
$ git commit -m "updated framework submodule"
L'ultimo passaggio è necessario perché git tiene traccia dello specifico commit associato a un determinato modulo (in modo che quando qualcuno clona il genitore che otterrà quella versione del sottomodulo, piuttosto che la sua revisione più aggiornata, che avrebbe potuto subire modifiche irrisolte che avrebbero impedito che funzionasse come previsto con il repository principale). Quindi, se aggiorni il sottomodulo, devi registrare il nuovo commit nel genitore.
Se si apportano modifiche nel sottomodulo framework
, si otterrà nuovamente solo git push
come si farebbe con qualsiasi altro repository. Dovresti quindi eseguire il commit della nuova revisione nel modulo genitore.
Perfetto, quindi quando vengono apportate modifiche a Framework, come faccio a inserirle nel progetto ora che è un modulo? Inoltre, se apporto le modifiche a Framework anziché a Project, come posso reinserirle nel Framework git repo? – Justin
Ho aggiornato la mia risposta. – larsks
Una piccola nota. Il sottomodulo HEAD è staccato quindi è necessario fare attenzione a fare modifiche nel sottomodulo. Creare un ramo (o passare a un ramo), apportare le modifiche, eseguire il commit e quindi premere. – GoZoner