Controllo della versione: gestione del codice incompleto / non funzionante

7

Sembra una buona pratica generalmente accettata non spingere codice invalido, rotto o incompleto. Ma uno degli enormi vantaggi dei sistemi di controllo delle versioni è che ti offre una posizione remota per il tuo codice, in modo che tu possa lavorare sulla stessa base di codice da più posizioni.

Supponiamo che stiate lavorando su una funzione con un paio di altri sviluppatori e che venga annunciata una brutta tempesta invernale; tutti sono d'accordo di andare a casa e continuare a lavorare piuttosto che rimanere impigliati nella tempesta, ma nessuno è in un ideale posto di sosta . Che cosa fai?

  1. Crea rami diversi per ogni sviluppatore e apporta le tue modifiche a questo, spinga quei rami a distanza e speri di poterlo ripulire più tardi su remoto senza rendere la vita difficile?
  2. Crea un remote diverso solo per il codice incompleto?
  3. Copia il tuo codice sul tuo flash drive personale e spera di non perderlo più tardi o di essere scoperto a violare le norme aziendali?
  4. Qualcos'altro?

(Usiamo git , ma mi auguro che la risposta possa essere generale per qualsiasi sistema di controllo della versione.)

    
posta kojiro 28.01.2013 - 16:26
fonte

6 risposte

14

Fai un passo più in là della semplice creazione di un ramo per risolvere questo specifico problema e passa alla creazione di un ramo per ogni funzione, bugfix, ecc ... che decidi di implementare. Ci si dovrebbe aspettare che ognuno di questi rami abbia un codice in errore in qualsiasi momento. Una volta che il codice è stato completato, può essere unito / testato rispetto al ramo principale del tuo repository.

Ciò ti consentirà di risolvere il problema attuale relativo alla posizione in cui memorizzare codice incompleto e non funzionante e ad aiutarti a organizzare i tuoi pensieri e le tue idee. Se vuoi provare una nuova caratteristica pazzesca nel tuo tempo libero, devi semplicemente creare un ramo per quella funzione e iniziare a lavorarci su. Puoi rimuoverlo per due mesi in uno stato non funzionante e riprenderlo in un secondo momento unendovi nuovamente le modifiche che sono state apportate al ramo principale.

Un buon schema di una ramificazione in questo modo usando l'integrazione continua (CI) può essere trovato qui: link

    
risposta data 28.01.2013 - 18:41
fonte
7

Se utilizzi un DVCS, è semplice come "4. Crea un repository remoto per ogni sviluppatore."

Per la maggior parte dei CVC, devi davvero usare le filiali. TFS offre mensole che possono essere utilizzate per questo scopo.

    
risposta data 28.01.2013 - 16:34
fonte
4

È qui che brillano le buone strategie di ramificazione: nulla di incompleto dovrebbe entrare in master , ma ciò non significa che il codice incompleto e work in progress non possa raggiungere il repository condiviso. Ci sono molte buone ragioni per farlo, come backup / macchine per cambiare / cambiare posizione / aiuto & ripassa / dà a noi anziani una buona idea che i ragazzi stanno facendo di più che giocare a WoW.

    
risposta data 28.01.2013 - 17:12
fonte
2

I rami sono la tua migliore opzione. La regola d'oro è di non rompere la build. Supponendo che sia il tronco principale e si stia costruendo correttamente, quindi creare un ramo e mettere il tuo lavoro temporaneo lì va bene. Preferisco di gran lunga vedere il lavoro incompleto memorizzato nel controllo di versione di quello lasciato su un computer che viene distrutto però.

    
risposta data 13.03.2013 - 19:17
fonte
1

Se lavori con CVCS puoi provare a rotolare con un tronco. Ho visto questo fatto molto bene alcune volte. La cosa da fare è avere un'integrazione continua con i test unitari e test contigui su quel tronco.

Una regola: Non rompere la build e non interrompere la funzionalità.

Ma ci sono alcuni checkin 'incompleti' che sono accettabili. Ad esempio, se stai per aggiungere una funzione e hai bisogno di controllare alcune classi di modelli che non sono usate da nessuna parte, va bene, menziona solo che cosa sono nei registri di commit. Se è necessario estendere una classe esistente per avere più funzionalità, anche questo è OK.

I check-in frequenti hanno 3 vantaggi:

1) Ognuno vedrà presto la tua "direzione". Saranno in grado di coordinarti con te sul loro lavoro e utilizzare le tue modifiche se vedono il loro valore. Un problema con la ramificazione delle funzionalità è che le persone possono contemporaneamente inventare la stessa ruota.

2) Le tue cose saranno testate prima. Un problema con la ramificazione di tutto è che devono esserci 2 cicli di test: uno per la funzionalità eseguita nella filiale e uno per la funzione dopo l'unione.

3) Se le cose si rompono, saranno catturate da altri sviluppatori ancor prima che vadano al QA. I bug sono meglio affrontati il prima possibile.

Un avvertimento: questo funzionerà su team di piccole-medie dimensioni. Ad un certo punto le persone iniziano a pestarsi troppo le dita dei piedi e tu sarai costretto a diramarti.

    
risposta data 28.01.2013 - 20:56
fonte
0

Nell'uso normale, non commetterei modifiche al controllo del codice sorgente fino a quando una funzionalità non è completa e testata. La "brutta tempesta invernale" sembra un evento raro, che potrebbe giustificare regole speciali. Se qualcuno non si trovasse in una posizione ideale, allora chiederei loro di salvare quelle modifiche su un'altra unità, o forse di comprimerle e inviarle per e-mail al caposquadra. Se entrambi sono proibiti dal tuo ambiente di lavoro, allora interromperò l'utilizzo normale e li farei semplicemente rimettere il codice incompleto al controllo del codice sorgente. Se si rompe qualcosa, allora è piuttosto semplice il rollback. E questo dovrebbe essere un evento raro piuttosto che la norma.

    
risposta data 28.01.2013 - 16:35
fonte

Leggi altre domande sui tag