Sto sviluppando una libreria software che ho iniziato durante il mio dottorato e utilizzata nella mia tesi. Da allora ho iniziato una posizione di ricerca e, come esperimento, ho voluto provare a riscrivere le parti per vedere se potevo semplificarlo. Ciò si è rivelato molto più efficace di quanto mi aspettassi. Ho riscritto anni di lavoro in poche settimane e il risultato finale è molto più pulito di quello che avevo prima.
Ora voglio rendere pubblica la mia riscrittura, ma non sono sicuro di cosa fare sulla cronologia delle revisioni. Mi riferisco a specifici commit nella vecchia versione della mia tesi, quindi mi piacerebbe averli conservati per i posteri (e quindi posso ridere del mio codice spazzatura in seguito.) Posso pensare a 3 opzioni:
- Elimina tutto il vecchio codice in un unico commit. Estrai tutti i commit dalla riscrittura come patch e applicali uno per uno nel vecchio repository.
- Crea un tag tag per il vecchio codice, ad esempio
my-lib-0.0.1
, spiegando che si trattava di una versione nascente del codice di quando ero giovane e sciocco. Aggiungi la riscrittura come remoto per il vecchio codice, quindigit reset --hard rewrite/master
. Questo sostituirà la cronologia delle revisioni del vecchio codice con quella della riscrittura. - Spiega in
README
per il vecchio repository che è deprecato e mantieni la riscrittura in un repository completamente nuovo.
Non mi piace l'opzione 3, perché preferirei avere tutto nello stesso repository. Inoltre, c'è ancora una discreta quantità di codice condiviso tra la vecchia e la nuova versione. L'opzione 2 ha il merito di mantenere la cronologia delle revisioni abbastanza pulita (gli utenti non dovranno clonare più di 400 commit di spazzatura da quando non sapevo cosa stavo facendo) ma mantenendo la cronologia lì nell'improbabile evento che qualcuno fa voglio vederlo. D'altra parte, non mi piace l'idea di "riscrivere la storia", e per evitare la clonazione di immondizia, posso sempre dire alla gente di fare cloni superficiali.
Quale di queste opzioni è la meno cattiva? Ce ne sono altri che non ho considerato?