Ho alcuni file che sono usati in molti dei miei repository:
-
functions.sh
, libreria di shell per stampare ad esempio un messaggio di avviso / errore colorato o la documentazione di un file di script. -
%codice%; uno standardizzato che installa il file
Makefile
in$(CURDIR)/[dirname].sh
e fa riferimento a uno script di test. -
$(PREFIX)/[dirname]
. -
%codice%; Ad esempio, i comandi Makefile stampano tutte le definizioni delle variabili in% gen
LICENSE
.
Questi sono più o meno stabili, e alcuni sono usati probabilmente in una dozzina di repository. Ho pensato a come mantenere questo ASCIUTTO , ma nessuna delle opzioni finora sembra soddisfacente:
- Continua a farlo ora, creando una copia per ogni nuovo repository. Questo mantiene il codice insieme a tutte le sue dipendenze (evitando bug quando la soluzione generale non è abbastanza generale), ma le modifiche che sono applicabile in più posti devono essere applicati separatamente in ciascuno.
- Aggiungi un eseguibile a ciascuno dei repository a scarica i file necessari. Ciò significa che gli sviluppatori e gli utenti finali dovranno eseguire un comando extra per ottenere tutti i file rilevanti e interromperà la possibilità per gli sviluppatori di modificare e
tools.mk
/Makefile
dei file inclusi. - Utilizza
commit
o equivalente. Ciò mantiene almeno i repository connessi, ma nel caso Git sembra che sia limitato a "una sottodirectory dedicata", quindi nessun file di livello superiore, e nessun mix con i file di repository principali che appartengono alla stessa directory. Questo potrebbe essere aggirato con i collegamenti simbolici, ma questa è una brutta soluzione per l'ovvia situazione ideale.
La soluzione ideale dovrebbe:
- Comunicare con il repository corretto quando si esegue un'operazione su un file.
- Consenti include nelle stesse directory della directory padre .
- Un solo, semplice comando dovrebbe essere sufficiente per aggiornare l'intero repository e tutto include, indipendentemente da quante o quanto profondamente annidate.
- Consenti include nella directory di primo livello .
- Non incorre significativi vincoli di utente o sviluppatore (deve essere online durante l'installazione) o lavoro extra (eseguendo un comando di "pre-installazione" separatamente dal comando "install").
- Permetti di includere "cherry-picking" di file . Ad esempio, molti progetti potrebbero aver bisogno di un diverso
push
, e uno dei quali non utilizzato è solo brutto (e diventerebbe più brutto con l'aggiunta di altri file).
Questo tipo di cose è possibile con il software attuale?