2012-02-22 14 views
5

Sono abbastanza nuovo per Git: Vengo da SVN e ho trovato molto potente la funzione: esterna. Qui in Git non ho trovare qualcosa di simile:Invio di sottostrutture in un repository git

  • sottomoduli sono perfetti per l'aggiunta di moduli di progetto che non sono sempre necessari. Devono essere inizializzati dopo la clonazione del repository e non è possibile includere solo una sottodirectory del progetto originale.
  • i sottotitoli sono veramente buoni per l'aggiunta di librerie (consentono anche l'inclusione di sottodirectory), ma spingerli è un vero dolore.

Quindi lo scenario è questo: Ho un progetto, nel quale voglio includere alcune librerie. Voglio la possibilità di cambiare tutte queste librerie e inserirle nei propri repository. Inoltre alcune di queste librerie sono sottodirectory di progetti più grandi (per esempio se un progetto include anche demo o file readme, non includerò quelle dir nel mio progetto).

Come posso farlo?

ho provato:

Bene, se hai raggiunto questo punto, grazie per la vostra pazienza, ora vorrei qualcosa di diverso da provare, perché in questo momento la mia conclusione è : "sottostruttura spingendo non è consentito in Git" ç_ç

+0

http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-esternals/3132221#3132221: i sottomoduli git e esterni sono in effetti diversi. Ma puoi modificare il contenuto di un submodulo e spingerlo al suo repository: http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194. Fondamentalmente, la mia risposta sarebbe la stessa di http://stackoverflow.com/questions/9394286/planning-repository-layout-for-git-migration/9395375#9395375 – VonC

+0

ok, grazie ... ma (per favore correggetemi se Mi sbaglio) con i sottomoduli non posso "includere" solo una specifica sottomodulo-directory ?? Voglio dire: il mio sottomodulo ha due directory: Demos e Source e voglio includere _lyly_ il contenuto Source nel mio progetto genitore ... spero sia comprensibile ... –

+0

corretto: un sottomodulo è un repository git proprio: dovresti fare il checkout qualunque cosa. Mentre la verifica sparsa è possibile (http://stackoverflow.com/a/2467629/6309), non sono raccomandati. Usando il link simbolico per collegare solo ciò che vuoi vedere è meglio. – VonC

risposta

3

paio di osservazioni dai commenti:

quindi vi consiglio:

  • caricamento (git checkout) il repo genitore e tutti i suoi sottomoduli
  • creare altrove la struttura corretta, con link simbolico per sottomoduli (o sottodirectory di sottomoduli in ordine per ottenere ciò che ti serve
  • torna periodicamente al repository git ain padre per rilevare eventuali modifiche (doni dall'altra struttura di directory creata al di fuori di Git) per commettere e inviare tutti i moduli dei sottomoduli, quindi eseguire il commit e spingere il repository padre.

git checkout

parent repo 
    + 
    +--> main project 
    + 
    +-> mainDir1 
    +-> mainDir2 
    +--> lib1 
    + 
    +-> lib1Dir1 
    +-> lib1Dir2 
    +--> lib2 
    + 
    +-> lib2Dir1 
    +-> lib2Dir2 

e la propria struttura di directory del progetto (per esempio)

+--> main project (symlink to ../parent/main project) 
    + 
    +-> mainDir1 
    +-> mainDir2 
    +-> lib1Dir1 (symlink to ../parent/lib1/lib1Dir1) 
    +-> lib1Dir2 (symlink to ../parent/lib1/lib1Dir2) 
    +-> lib2Dir2 (symlink to ../parent/lib1/lib2Dir2) 

(notare non c'è lib2Dir1 (per esempio) perché nel progetto attuale si don' ne ho bisogno)

+0

grazie, la tua risposta è davvero un'idea fantastica a cui non ho mai pensato. Ma ora capisco che non è quello che sto cercando ... Voglio dire: con la tua soluzione se voglio clonare il progetto devo fare i symlink, quindi non è la soluzione chiavi in ​​mano che mi piacerebbe fornire. Sì, è molto più facile della mia precedente soluzione con sottoalberi, ma ora penserò che questa è una "mancanza" di Git, non è vero? BTW grazie mille per la tua pazienza !! –

1

La soluzione di VonC è pulita, ma ha uno svantaggio: Non c'è nessuno un modo per catturare una configurazione del tuo progetto + librerie in un determinato momento.

Se è necessario configurare di nuovo il progetto, è necessario verificare il progetto + le biblioteche, ma potrebbero essere tutte su rami diversi e si impegna a ciò che si era in precedenza.

Quindi, se si segue il suggerimento di VonC, magari creare tag in ciascuno dei repository nel momento in cui si rilascia un progetto, in modo che sia possibile controllarli di nuovo nello stesso punto.

In caso contrario, spostare sempre in avanti e non verificare mai una versione precedente.

Problemi correlati