2015-06-22 12 views
5

ho Biblioteche A, B, C, e D.condivisione Git moduli

le dipendenze sembrare così:

A 
    | 
/\ 
B  C 
\ /
    D 

Tuttavia abbiamo la B e C git pronti contro termine istituito con D come modulo. vorremmo impostare B e C come sottomoduli in A, ma vorremmo anche farli puntare entrambi su una singola istanza di sottomodulo di D.

Qualcuno conosce il modo giusto per farlo?

risposta

0

Se si aggiungono B e C come sottomoduli in A, i loro file .git verranno memorizzati in A sotto .git/modules/B e .git/modules/C. Ognuno di questi (una volta che hai fatto git submodule init; git submodule update in ciascuno) avrà il proprio .git/modules/D, tuttavia, quindi i file pronti contro termine non saranno condivisi. Ognuno avrà la sua copia dei file archiviata.

È possibile aggirare questi problemi con i collegamenti simbolici. Ad esempio, puoi aggiungere D come sottomodulo solo a B, quindi link simbolici B in D in C. Ora puoi lavorare in B/D o C/D, e l'altro rimarrà sincronizzato. Ci sono 2 problemi con questo, però. Il primo è che non è possibile verificare diversi punti in ciascuno: devono rimanere sincronizzati, perché sono la stessa cosa. Questo è minore, però, e potrebbe anche corrispondere ai tuoi desideri. Il secondo è peggio; se stai tracciando D solo in B, e C lo sta 'tracciando' solo come tramite link simbolico a B D (symlink sono compresi da git, btw), quindi C non ha modo di governare la propria dipendenza su D.

È normale apportare una modifica a un sottomodulo e quindi controllare quella modifica nel repository dipendente, che contiene, ma ora è necessario ricordare di saltare nell'altro repository nel diamante e assicurarsi che anche funzioni (automatizzato) il test, specialmente se eseguito attraverso un hook git, può aiutare molto qui). Se ripristini un commit in B/D, ad es., O ne controlli uno più vecchio, o cambi ramo in B/D, devi sempre passare a C/D e assicurarti che le cose funzionino ancora lì. Questa configurazione può diventare un po 'un dolore da microgestione, soggetto a commit interrotti, in cui B lavora contro la corrente D, ma C no, o viceversa.

Problemi correlati