Utilizzare un sistema di controllo della versione distribuita come git e utilizzare la macchina per cartelle condivise per archiviare il repository di riferimento. Ecco perché:
Ogni clone è un backup
Se il disco rigido del server si arresta in modo anomalo, tutti ne hanno una copia, pronta per essere distribuita su una nuova unità o server. Poiché la tua azienda non prende sul serio il controllo delle versioni, suppongo che potrebbe essere praticamente lo stesso con i backup.
Riferimento comune
Avere un repository principale con un ramo master consente di conoscere la versione che ha l'ultima parola. Questo risolve il "Hai testato le tue modifiche rispetto alla versione di Franck, ma avevi anche quelle di John? E come le hai unite?".
Consegna più comodamente
Il cliente desidera una versione alfa oggi? Bene, puoi verificare se il master è abbastanza stabile e spedirlo. Se non lo è e non hai il tempo di ripararlo, torna indietro nel tempo e ottieni una versione più vecchia ma più stabile. Non puoi farlo se hai solo l'ultima versione.
Torna indietro nel tempo e correggi i tuoi errori
La tua unione manuale ha avuto problemi che hai visto solo dopo alcuni giorni, ma hai già sovrascritto il contenuto delle tue cartelle condivise? Senza un VSC non hai una storia, quindi non puoi facilmente tornare a un punto in cui puoi controllare gli errori che hai fatto e correggerli. Il codice non è come un'immagine, è come un film: si evolve nel tempo. È possibile estrarre un'immagine da un film. Non è possibile estrarre un film da un'immagine.
Individua i bug più facilmente
È apparso un bug ma non l'hai notato davvero al momento dell'introduzione, quindi non è stato possibile correggerlo mentre il codice era "attivo". Ora non sai davvero quale modifica l'ha introdotta, quindi potrebbe provenire da diverse posizioni nel codice. Ci vorranno ore solo per trovare dove cercare. Con git, avresti potuto semplicemente sviluppare un test per dire se il bug si verifica su una versione specifica e usare git bissect
per trovare il commit esatto che ha introdotto il bug. Invece di cercare migliaia di righe di codice, ora sai che si trova in quel cambio di 10 righe e puoi mantenere il test nella tua suite di test per assicurarti che il bug non venga più introdotto.
Ogni sviluppatore è responsabile del proprio lavoro
Se sei il capo squadra e non hai VCS, molto probabilmente dovrai fare il lavoro sporco, le fusioni. Se lo fai da solo, probabilmente non sai tutto su tutte le modifiche e potresti introdurre errori. Al contrario, se chiedi sempre alle persone che hanno scritto il codice di riunirsi con te ogni volta che c'è un codice da unire, allora è tempo che non useranno per produrre nuovo codice.
Con un VCS, in un semplice flusso di lavoro, lo sviluppatore deve solo prendersi cura del proprio lavoro e una fonte esterna di cambiamenti: il ramo principale. Potrebbero esserci 1 o 100 persone impegnate nel ramo principale, è lo stesso. Per poter spingere i suoi cambiamenti, dovrà adattarli agli ultimi cambiamenti fatti da altri. Può sembrare che impieghi più tempo a inviare il codice, ma è perché stai anche facendo l'unione che avrebbe comunque impiegato del tempo.
La differenza è che l'unione viene effettuata dalla persona che ha apportato le modifiche, che conosce meglio quel codice perché lo ha scritto.
Chi ha scritto quel codice?
C'è quel bug qui, ma chi ha scritto quella particolare riga di codice? È difficile da ricordare, soprattutto se il progetto dura sette mesi. git blame
ti avrei detto chi e quando è stata scritta quella riga, così puoi chiedere alla persona giusta, e non c'è "Non ricordo di averlo scritto".
Il progetto sta diventando più grande
Il cliente desidera più funzionalità e sei un team troppo piccolo, avrai bisogno di un altro sviluppatore. Come gestite la maggiore complessità di unione senza un VSC?
Cambiamenti urgenti
Il cliente ha chiamato e chiesto una correzione di bug critica per la produzione, ma al momento stavi lavorando a una nuova funzionalità. Solo git stash
per mettere da parte le modifiche o inserirle in un nuovo ramo e spingere le modifiche e sei pronto per iniziare a lavorare sulla soluzione urgente, senza paura di perdere il lavoro in sospeso.
Ha funzionato 10 minuti fa
Stai apportando alcune modifiche localmente e qualcosa che ha funzionato 10 minuti fa ha smesso di funzionare. Senza un VCS fissi il codice o, nella migliore delle ipotesi, fai una copia della versione di riferimento e diff per vedere cosa cambi. Oh aspetta, il riferimento è cambiato da quando ho iniziato a lavorare, quindi non posso più diff. E non pensavo di conservare una copia originale del codice su cui ho basato le mie modifiche.
Con un VCS, fai subito qualcosa di simile git diff
e fai la tua modifica rispetto alla versione corretta del codice su cui ti basi.
Devo tenere i miei log di debug
Quindi sei un cattivo ragazzo e non usi la registrazione? Hai dovuto cospargere printf
s in tutto il tuo codebase finché non hai trovato tutti quei pezzi di quel brutto bug? Ora ne hai trovato uno, lo hai risolto, ma vuoi mantenere il tuo codice di debug accuratamente preparato per risolvere i problemi rimanenti.
Senza un VCS, è necessario copiare i file, espellere il codice di debug (che può aggiungere alcuni errori di modifica), inviarlo e ripristinare i file di backup. Oh, ma sembra che sia entrato in qualche codice di debug.
Con git, basta git add --patch
selezionare le poche righe di codice che si desidera inserire nel commit e si può solo impegnare . Quindi riprendi il tuo lavoro e hai ancora il tuo codice di debug. Non è stato necessario toccare il codice, quindi nessun errore di copia / incolla.
La grande palla di fango
Senza un VCS, le persone lavorano dalla loro parte e ti danno un sacco di cambiamenti, a volte non correlati. Quando c'è troppo codice da controllare, è difficile trovare un bug.
Un VCS ti consentirà di apportare piccole modifiche incrementali e ti darà un registro delle modifiche. Il changelog è essenziale: la gente deve non dire il motivo per cui stanno facendo il cambiamento, non quello che è il cambiamento (la quale domanda è alredy risposta dal codice cambiamento stesso). Questo significa, ad esempio, quando si ispeziona il codice di una nuova funzione, non sarà necessario leggere molte modifiche miste non correlate come correzioni di bug non correlate. Questo aiuta a concentrarsi sul codice che ti interessa.
Se ti do 100 patate 1 per 1, e una è marcia, la troverai immediatamente. Ora, se scarico 100 patate davanti a te e ti chiedo di trovare quella marcia, non è lo stesso compito.
dentellatura
Spero che tu abbia una buona politica di stile di codifica, altrimenti i cambiamenti di rientro ti faranno impazzire se ti unisci a mano. Certo, puoi ignorare lo spazio bianco nelle modifiche (ma non nelle lingue quando conta il rientro, come Python). Ma poi otterrai un codice dall'aspetto strano difficile da leggere.
Sei il capo progetto
Se sei il leader, questo significa che avrai la colpa se le cose non funzionano. Se non riesci a sentirti a tuo agio con la situazione perché il tuo capo non riesce ancora a capire che vale la pena usare lo strumento giusto per il lavoro giusto, almeno mi rifiuto di diventare il leader di un fallimento prevedibile.