2011-08-22 15 views

risposta

21

si poteva guardare il supporto di git per submodules. Dovresti aggiungere il secondo repository come sottomodulo al tuo progetto principale, ad es. con comandi come:

git submodule add git://wherever/blah.git library-code 
git commit -m "Added a new submodule called 'library-code'" 

Quando si modifica nel library-code sottodirectory, è come se il repository genitore non esiste - è possibile modificare origin di utilizzare un trasporto che si può spingere più e quindi spingere come se fosse completamente indipendente.

Per specificare che si desidera che il sottomodulo sia in una particolare versione, è necessario passare al sottomodulo e utilizzare git checkout per passare alla versione corretta. Poi si torna fino al repository principale e lo stadio e si impegnano che la nuova versione modulo con:

git add library-code 
git commit -m 'Change the submodule version' 

L'albero della repository principale memorizza solo la versione che il modulo dovrebbe essere, in modo che quando si preme il repository principale , non sta spingendo nessuno dei file nel sottomodulo.

Al fine di scindere questa sottodirectory, mantenendo la cronologia, è necessario clonare il vostro repository e utente git filter-branch originale di riscrivere la storia, come descritto in questa risposta:

Quindi è possibile inviarlo a un repository GitHub appena creato, tornare al progetto originale, rimuovere la sottodirectory e sostituirla con il sottomodulo come descritto sopra.

Se non hai molta familiarità con i concetti git, questo potrebbe essere difficile per te - ti consiglio di leggere prima i sottomoduli git.

+2

Ho già il codice nella mia sottodirectory, quindi voglio convertirli in git repo e inviarli a un nuovo repository remoto (ad es. Github). Puoi fare un esempio di farlo? Mi dispiace di essere così newbie in queste cose :) – yasar

+1

Vuoi conservare la cronologia di tutto nella sottodirectory? –

+0

E per quanto riguarda il sottomodulo quando spingo un repository più grande ad altri repo remoti? Questo include i file del submodule? – yasar

1

Quando si apportano modifiche a una determinata directory, si mettono in scena quelle modifiche e si esegue il commit e si spinge, si sta effettivamente "spingendo" proprio quella directory.

Se l'altro repository di Git contiene solo la directory che si desidera premere, ed è per questo che si desidera averlo come repository in sé, è possibile consultare Git Submodules.

1

Hai esaminato i sottomoduli? Permette ai repository git di nidificare in modo pulito, ma rimane completamente indipendente.

Ciò significa che è possibile avere una sottodirectory con un URL remoto diverso per push/pull e diversi commit tree + log senza ingombrare il progetto principale.

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial

Problemi correlati