Modo sicuro di iniziare un progetto da zero mantenendo il vecchio codice funzionante

4

Ho un progetto di esplorazione di Mandelbrot Set che ho ospitato su GitHub. L'ho usato per imparare come generare il set Mandelbrot e per avere più esperienza nell'uso di Java ExecutorService . Funziona alla grande, ma ho appena iniziato ad attaccare nuovi pezzi mentre procedo, e sta diventando un disastro. È già stato rotto due volte dopo aver apportato piccole modifiche a una piccola parte del codice.

Ho deciso che è necessaria una completa riscrittura, ma ovviamente voglio mantenere il vecchio codice incasinato, ma funzionante. Ho pensato a 2 modi basilari per fare questo:

  • Avvia un progetto completamente nuovo. Mi piacerebbe evitare di farlo perché l'obiettivo del codice è lo stesso, e in realtà, i risultati finali dovrebbero essere gli stessi. Sono concettualmente lo stesso progetto.

  • Separa il vecchio codice in un ramo "disordinato", avvia un nuovo ramo per il nuovo tentativo, quindi inserisci il nuovo codice nel nuovo codice.

Immagino che l'idea di ramificazione possa funzionare, ma non ho un sacco di esperienza con Git.

Ci sono delle insidie nella creazione di un nuovo ramo di codice che condivide pochissimo (se non altro) con altri rami? Se questa non è una buona idea, c'è un modo migliore per farlo?

    
posta Carcigenicate 06.07.2017 - 18:52
fonte

2 risposte

6

Se stai partendo da zero, ha senso iniziare un nuovo progetto. "Vorrei evitare di farlo perché l'obiettivo del codice è lo stesso, e in realtà i risultati finali dovrebbero essere gli stessi" : gli strumenti di controllo della versione non riguardano l'output di un programma, ma riguardo al codice. Ad esempio, molti strumenti di Linux simulano esattamente il comportamento degli strumenti Unix closed-source e non condividono il codice.

D'altra parte, i sistemi di controllo delle versioni e i test unitari appropriati aiutano a rifattorizzare il vecchio codice disordinato in un nuovo codice pulito. Scrivere test (superato il vecchio e disordinato codice) e assicurarsi che il codice refactored passi anche loro, è come una rete di sicurezza. Se decidi di farlo, la ramificazione è una buona opzione. Il fatto che il vecchio codice "funzioni" alla grande, rende i test scritti per questo, un ottimo strumento per convalidare la nuova versione più pulita.

    
risposta data 06.07.2017 - 19:11
fonte
3

La seconda opzione è tecnicamente la più corretta. Nei progetti di conversione, in genere ho 2 copie del repository. La prima copia è il mio codice di lavoro corrente e lo tengo per riferimento. La seconda copia è il nuovo sforzo ... anche se è una lavagna vuota.

Si spera che con una piccola ristrutturazione riuscirai a mantenere buona parte della logica che hai già scritto.

Questo è l'approccio quando si convertono progetti di lavoro da una versione di un framework a una versione più recente, ma incompatibile che abbia correzioni di bug. Sfortunatamente, a volte le modifiche sono così estese che alcune sezioni del mio codice richiedono una riscrittura massiccia (sto osservando il tuo framework AspNet Core e Identity). A volte le modifiche sono minime.

Per fare il lavoro, devi creare il ramo. Puoi farlo da GitHub o BitBucket, oppure puoi farlo dalla riga di comando:

git branch --set-upstream-to=origin new-mandelbrot

Quanto sopra crea un nuovo ramo e mantiene la connessione remota in modo che le modifiche sul ramo locale possano essere trasferite quando sei pronto ( --set_upstream-to=origin ). Il nome del ramo è l'ultima parte della riga di comando ( new-mandelbrot ).

Una volta fatto, git ti ha già passato alla nuova filiale. Puoi eliminare file, ecc. Potresti voler mantenere i file .gitignore e Readme.md , ma l'eliminazione di tutto e il commit di tale modifica riavvia efficacemente l'orologio.

Se non apporti modifiche al codice funzionante, puoi fare una richiesta di pull e unire il nuovo progetto al ramo master e questo sostituirà in modo pulito tutto.

    
risposta data 06.07.2017 - 19:22
fonte

Leggi altre domande sui tag