Sebbene scoraggiato da Charles , penso che tu cerchi in cerca di git sottomoduli :
Git's submodule support allows a repository to contain, as a subdirectory, a checkout of an external project. Submodules maintain their own identity; the submodule support just stores the submodule repository location and commit ID, so other developers who clone the containing project ("superproject") can easily clone all the submodules at the same revision. Partial checkouts of the superproject are possible: you can tell Git to clone none, some or all of the submodules.
Mentre Charles sembra ritenere che git
sottomoduli siano carenti perché non possono funzionare come svn
esterni (facendo riferimento alla testa di un ramo piuttosto che a un revisione specifica), penso che questo sia dovuto alla differenza nel flusso di lavoro previsto tra git
e svn
come qualsiasi altra cosa.
A seconda di quando e dove hai aggiornato la tua copia di lavoro, le directory in diversi punti nella tua svn
gerarchia delle directory di lavoro potrebbero essere a revisioni diverse. Questo non è possibile con git
. In git
ogni volta che si aggiorna a una revisione, si aggiorna l'intera copia di lavoro a quella revisione - ci si aspetta che quando si passa alla revisione 123abc si ottenga lo stesso identico codice dell'ultima volta che si è verificato 123abc, e ciò include tutti i sottomoduli che la revisione potrebbe avere.
Se vuoi aggiornare un sottomodulo , devi aggiornarlo e quindi fare un nuovo commit al super-modulo per aggiornarlo per usare la nuova revisione nel sottomodulo . Significa che i sottomoduli sono meno flessibili di esterni , ma impone il paradigma git
primario di un'istantanea ampia del repository.
Se vuoi che svn
esterni utilizzi sempre la funzionalità di revisione più recente, sei praticamente da solo. Come già detto, devi solo controllare il svn
submodule manualmente e poi .gitignore
it.
- Dato il funzionamento di
svn
, il modo in cui esterni funziona è perfettamente accettabile.
- Dato il funzionamento di
git
, il modo in cui i sottomoduli funzionano è perfettamente accettabile.
Per inciso, per quanto ho capito, Mercurial subrepository funziona allo stesso modo dei sottomoduli di Git , quindi non sarà di alcun aiuto.