Oh wow, sì.
Uso sia SVN che Git e non posso dirti quante volte mi hanno salvato il culo. Più Git di SVN, ma non iniziamo qui flamewars. Questo è su progetti su cui lavoro da solo, oltre a progetti su cui lavoro con altre persone. Nessuna scusa per non farlo, davvero.
Essendo umano, sono fondamentalmente autorizzato a fare stupide cazzate tutto il tempo. Usando il controllo della versione, posso tranquillamente continuare a fare cose fantastiche e impegnarmi a intervalli dove ha senso. Quando faccio qualcosa di incredibilmente stupido, posso semplicemente ritirare le mie modifiche all'ultimo punto in cui ho commesso. Anche con Git, posso ripristinare parti specifiche di modifiche in un file piuttosto che l'intero file.
Il mio controllo di versione (ab?) usando il flusso di lavoro, come sviluppatore di Rails (e sì, so che usi C #, si applica lo stesso flusso. Solo i miei comandi git
per i tuoi comandi tfs
), va come questo per un nuovo progetto:
- Prendi una nuova funzione da Pivotal Tracker e scopri cosa diavolo dovrebbe fare. Conosciuto anche come traduzione da client a inglese.
- Crea una nuova directory per il progetto e poi immediatamente :
-
git init
-
git add .
-
git commit -m "Initial setup for [project]"
-
git remote add origin [email protected]:radar/project.git
-
git push origin master
Ora ho un repository Git pronto per il commit, con un ramo master
. Questo ramo master
dovrebbe rimanere sempre "puro". I test dovrebbero essere sempre al 100% -passando-senza-scuse-o-qualcuno-andando-a-finire-licenziato-molto-gravemente-ferito-ho-menzionato-no-scuse su questo ramo. Se la funzione è sufficientemente complessa (prendendomi più di un'ora o due o se il cambiamento sarà più di un singolo commit sensibile) Creerò il mio ramo usando git checkout -b [feature-name]
, altrimenti lavorerò su master .
In questo ramo, posso fare qualunque cosa diavolo mi piace. master
sarà ancora "puro" e io posso eliminare efficacemente il posto e poi git checkout .
per recuperare tutto. È in questo ramo che sviluppo la nuova funzionalità, effettuando commit incrementali e sensibili lungo il percorso. Crea una pagina in cui un utente può compilare un modulo e quindi qualcosa per gestire quel modulo? Questo è un impegno. Aggiunta una nuova funzione a una classe e testata? Nuovo commit. Potrei essere incline a spingere questo ramo da qualche parte in modo che altre persone possano lavorare con me su di esso, nel qual caso vorrei git push origin [feature-name]
e poi potrebbero clonare il repository e git checkout origin/[feature-name] -b [feature-name]
per ottenere le mie modifiche e potremmo lavorare insieme su di esso .
Quando ho finito con la funzione, eseguo i test sul ramo [nome-caratteristica]. Quindi, posso tornare al ramo master
, verificare che tutto sia ancora "puro" eseguendo i test e quindi git merge [feature-name]
per unire il ramo in master. Quindi eseguo i test di nuovo per assicurarmi che sia ancora "puro" (ricorda, non ci sono scuse) e infine spingo le mie modifiche al ramo master
su GitHub.
Risciacquare, ripetere.
Senza il controllo della versione, sarei completamente perso. Farei una stupida merda e poi passare un bel po 'di tempo manualmente a rotolare indietro e non essere sicuro di averlo capito o meno. Il controllo della versione è un ottimo strumento per prevenire la stupidità (come lo è il testing, ma questo è un argomento tangenziale) e lo incoraggio davvero molto strongmente.
Nessuna scusa.