Domanda

Nel mio ambiente attuale, abbiamo una macchina di compilazione "pulita", che ha una copia esatta di tutte le modifiche apportate, niente di più, niente di meno.

E ovviamente ho la mia macchina, con dozzine di file in uno stato "in corso".

Spesso ho bisogno di creare la mia applicazione con una sola modifica in atto.Ad esempio, ho terminato l'attività ABC e voglio creare un EXE con soltanto quel cambiamento.

Ma ovviamente non posso confermare la modifica nel repository finché non viene testata.

La ramificazione sembra eccessiva per questo.Cosa fai nel tuo ambiente per isolare le modifiche per build e versioni di test?

@Mattb:Quindi, mentre aspetti un feedback sul tuo cambiamento, cosa fai?Lavori sempre esattamente su una cosa?

È stato utile?

Soluzione

Quindi ti stai chiedendo come gestire il lavoro su più "attività" contemporaneamente, giusto?Tranne la ramificazione.

Puoi avere più checkout dell'origine sul computer locale, suffiggendo il nome della directory con il nome del ticket su cui stai lavorando.Assicurati solo di apportare modifiche nella directory giusta, a seconda dell'attività...

Mescolare più attività in una copia di lavoro/invio può creare molta confusione, soprattutto se qualcuno ha bisogno di rivedere il tuo lavoro in un secondo momento.

Altri suggerimenti

Preferisco creare e testare build sul mio computer/ambiente locale prima di impegnarsi o promuovere eventuali modifiche.

Per il tuo esempio specifico, avrei controllato una copia pulita del sorgente prima di avviare l'attività ABC e, dopo aver implementato ABC, avrei creato una build localmente con quella al suo interno.

Qualcosa del genere:git stash && ./bootstrap.sh && fai dei test :)

Faccio del mio meglio per fare in modo che ogni operazione di "commit" rappresenti un singolo cambiamento coeso.A volte si tratta di un'intera correzione di bug o di un'intera funzionalità, a volte si tratta di un singolo piccolo refactoring sulla strada verso qualcosa di più grande.Non esiste un modo semplice per decidere cos'è un'unità qui, solo in base all'istinto.Chiedo (imploro!) anche ai miei compagni di squadra di fare lo stesso.

Se fatto bene, ottieni una serie di vantaggi:

  • Puoi scrivere una descrizione dettagliata e di alta qualità della modifica.
  • Leggere la prima riga della descrizione di ogni modifica ti dà il senso del flusso del codice.
  • Le differenze di un cambiamento sono facili da leggere e comprendere.
  • Se una modifica introduce un bug/un'interruzione della build/un altro problema, è facile isolarlo, comprenderlo e, se necessario, recedere.
  • Se sono a metà del cambiamento e decido di abortire, non perdo molto.
  • Se non sono sicuro di come procedere, posso dedicare qualche minuto a ciascuno dei diversi approcci, quindi scegliere quello che mi piace, scartando gli altri.
  • I miei colleghi acquisiscono la maggior parte delle mie modifiche prima, semplificando notevolmente il problema dell'unione.
  • Quando mi sento bloccato riguardo a un grosso problema, posso fare alcuni piccoli passi in cui ho fiducia, controllandoli man mano che procedo, rendendo così il grosso problema un po' più piccolo.

Lavorare in questo modo può aiutare a ridurre la necessità di piccoli rami, poiché fai un piccolo passo sicuro, lo convalidi, lo impegni, quindi lo ripeti.Ho parlato di come rendere il passaggio piccolo e sicuro, ma affinché funzioni, è necessario anche che la fase di convalida proceda rapidamente.Disporre di una potente batteria di unit test rapidi e dettagliati + test applicativi rapidi e di alta qualità è fondamentale.

I team su cui ho lavorato prima richiedevano revisioni del codice prima del check-in;ciò aggiunge latenza, che interferisce con il mio stile di lavoro a piccoli passi.Rendere le revisioni del codice un'interruzione ad alta urgenza funziona;lo stesso vale per il passaggio alla programmazione in coppia.

Tuttavia, il mio cervello sembra apprezzare il multitasking pesante.Per farlo funzionare, voglio ancora più modifiche in corso.Ho utilizzato più filiali, più copie locali, più computer e strumenti che eseguono backup delle modifiche in sospeso.Tutti possono funzionare.(E tutti sono equivalenti, implementati in modi diversi.) Penso che più rami siano il mio preferito, anche se è necessario un sistema di controllo del codice sorgente che sia in grado di creare nuovi rami rapidamente e facilmente, senza essere un peso per il server.Ho sentito che BitKeeper è bravo in questo, ma non ho ancora avuto la possibilità di provarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top