Quanto ti fidi dell'automobilismo?

2

Supponiamo di avere l'ultima versione di un file dal controllo del codice sorgente e che si verifichi un conflitto. Esistono quattro possibili tipi di modifiche nel conflitto:

  1. Il tuo
  2. Il loro
  3. Entrambi
  4. in conflitto

Naturalmente, nei casi 3 e 4, vorrai rivedere le modifiche manualmente (in quest'ultimo caso dovrai anche risolverlo). Per quanto riguarda i casi 1 e 2, non ne sono sicuro, ma sto pensando che solo i cambiamenti di tipo 2 (Theirs) dovrebbero richiedere un'ispezione manuale. Essendo la ragione, sai cosa hai cambiato, al contrario delle "loro" modifiche che potrebbero infrangere le tue modifiche. Quindi penso che si possa saltare la revisione delle proprie modifiche (caso 1) e rivedere / risolvere manualmente le altre modifiche (casi 2-4).

Altri sviluppatori hanno suggerito approcci più estremi, come solo la revisione delle modifiche in conflitto (o "entrambe") e l'integrazione della fiducia per il resto. L'altro estremo è rivedere tutte le modifiche ogni volta.

Naturalmente, altri parametri potrebbero essere utili. Ad esempio, se hai apportato una correzione singola a un file e ci sono 200 modifiche apportate da altri, allora puoi essere ragionevolmente sicuro che il tuo cambiamento non è correlato (ad esempio, è un file SQL e hai scritto una nuova stored procedure separata), forse puoi saltare la revisione delle altre modifiche.

Sono combattuto tra i pericoli di non ispezionare i cambiamenti e il tempo e l'energia che potrebbero essere salvati confidando nell'unione automatica. Presumibilmente, hai i test di compilazione e unit / component / e2e che metteranno in luce cattive fusioni.

    
posta Ohad Schneider 29.05.2013 - 14:45
fonte

4 risposte

4

Supposedly, you have compilation and unit/component/e2e tests that will expose bad merges.

Questa è la parte importante per me. In generale, mi fiderò dell'automissing per i file di codice (ma non markup, file di progetto, ecc.) In cui può effettivamente essere eseguito (non conflitti). Tende a manipolare progetti e markup, ma i file di codice sono (di solito) buoni.

Ma lavoro anche in un posto con frequenti commit, buona copertura del test unitario e check-in con gating (se il build / test non riesce, il commit non funziona). Oh, e la mia data di rilascio è di mesi nel futuro, non di ore ... 95%% delle volte, funziona perfettamente e risparmio il tempo e l'impegno di guardare attraverso le une. Ambienti diversi richiedono una diversa attenzione.

    
risposta data 29.05.2013 - 15:16
fonte
2

Puoi fidarti delle unioni automatiche se - e questo è un grande se - hai tutto il resto in ordine. Ciò significa che tu e chiunque altro che lavora sullo stesso file siete a conoscenza di cosa sta succedendo e avete controllato tutto il sistema prima di tuffarvi.

Per Cederqvist lo ha detto meglio nella sezione 1.2 di Gestione delle versioni con CVS , che faccio sapere ai noob di controllo della versione se stiamo usando CVS o altro:

CVS is not a substitute for developer communication.

When faced with conflicts within a single file, most developers manage to resolve them without too much effort. But a more general definition of "conflict" includes problems too difficult to solve without communication between developers.

CVS cannot determine when simultaneous changes within a single file, or across a whole collection of files, will logically conflict with one another. Its concept of a conflict is purely textual, arising when two changes to the same base file are near enough to spook the merge (i.e. diff3) command.

CVS does not claim to help at all in figuring out non-textual or distributed conflicts in program logic.

    
risposta data 29.05.2013 - 16:16
fonte
1

Anche la fusione manuale può essere piuttosto pericolosa. Il motivo è che anche se riesci a unirli in modo che il codice sia compilabile, il comportamento del codice potrebbe essere diverso sia dall'originale che dalla tua versione. Martin Fowler ha bliki che ne spiega maggiormente i dettagli.

E questo è anche il motivo per cui integrare spesso con il repository principale. Quindi non devi risolvere conflitti pazzi che comprendono dozzine di file.

    
risposta data 29.05.2013 - 15:28
fonte
1

Se hai molte istanze in cui ci sono 200 modifiche a un singolo file in un'unione, non penso che tu stia unendo abbastanza spesso, ed è molto probabile che ci sia un problema di complessità con quel file.

Abbiamo cattive fusioni probabilmente una volta ogni qualche mese, di cui siamo a conoscenza. Senza una sorta di team di ingegneria di rilascio per indagare su ogni cambiamento prima che venga creato un nuovo rilascio, o una buona peer review, non sarai in grado di cogliere ogni brutta fusione - se hai una brutta unione nei test unitari e una unione errata nel codice, che è più probabile di quanto si possa pensare, quindi non si rileverà il problema finché qualcosa non andrà molto male (o qualcuno, probabilmente non in IT, noterà una perdita di dati catastrofica).

Se non ti sforzi, puoi essere sicuro al 99% che tutto si è fuso bene. Se sei disposto a versare un 30-40% di release in più e a modificare i tempi di gestione, probabilmente sarai molto più vicino al 99,99%. Per un'azienda come Microsoft, probabilmente vale la pena investire, ma per molti altri non lo è.

    
risposta data 29.05.2013 - 16:15
fonte

Leggi altre domande sui tag