sottomoduli git: personalizzazione
-
20-08-2019 - |
Domanda
Quando si usano i sottomoduli git, qual è il modo preferito di personalizzare? Dovrei ...
- biforca il progetto e segui il fork
- tenta di sovrascrivere il comportamento predefinito
- apporta le modifiche localmente
Se nessuna di queste ha senso, allora cosa fa?
Soluzione
Non sono sicuro che la tua domanda implichi che tutti i progetti che desideri includere siano già progetti git o che siano attualmente svn, mercuriali, non controllati da versioni. Se è quest'ultimo, dovrebbe essere una risposta caso per caso.
Molto probabilmente, i progetti che vuoi includere e personalizzare sono già su, diciamo, github e quindi dovresti assolutamente attraversare github e usare quelle forcelle come sottomoduli. Qualsiasi personalizzazione deve essere archiviata e inviata a github.
Potrebbe essere più complicato se i progetti che vuoi includere sono altrove (o sono basati su svn, mercurial, ecc.). Un modo è di forkare i progetti localmente e quindi impostare cron-jobs per inviare a github qualsiasi modifica in arrivo. Cioè, crea specchi github. Per avere il controllo totale sia della fusione che dell'aggiornamento, potresti dover forkare quei mirror e includere quelle fork come sottomoduli nel tuo progetto, controllando le personalizzazioni locali e spingendole al fork del mirror.
L'alternativa n. 3, fork di progetti e solo check-in locali, potrebbe essere utilizzata in situazioni in cui non si hanno le opzioni di cui sopra e ciò che si sta creando non è realmente destinato a essere facilmente distribuito.
Il patching delle scimmie (alternativa n. 2 nell'elenco) dovrebbe essere un'alternativa lasciata alle situazioni in cui non si desidera che un progetto dipenda dal fatto che si tiene aggiornato un fork personalizzato con le modifiche a monte.
Altri suggerimenti
Trovo che i progetti secondari di forking usando git submodule siano estremamente noiosi, motivo per cui ho scritto git subtree invece.
L'idea di git subtree è di importare i contenuti del sottoprogetto nel proprio progetto, quindi si dirama tutto in una volta e si effettuano nuovi commit come preferisci. Quindi, quando sei pronto (se mai), puoi utilizzare git subtree split
per estrarre la cronologia del sottoprogetto e inviarla a monte.