Come posso evitare di ripetere i conflitti ripetutamente durante l'unione da uno a un ramo all'altro?

1

Ho impostato un repository SVN in questo modo:

  • tronco
  • rami
    • SVS
    • QA
    • DevelopmentTeam
    • programmer1
    • projectA
    • ProjectB
    • programmer2
    • projectC
    • projectD
    • programmer3
    • PROJECTE
    • projectF
    • projectG
    • projectH

Ogni programmatore può avere più progetti che sono rami e possono essere uniti al loro ramo "programmatore".

Tutti i rami dei programmatori vengono uniti al ramo DevelopmentTeam dal Manager, dove le modifiche vengono testate con i progetti di altri programmatori.

Una volta completato il test, il ramo DevelopmentTeam viene unito al ramo QA , dove viene eseguito il test QA .

Una volta completato il test QA , il ramo QA viene unito al ramo UAT , dove viene eseguito UAT .

Una volta che UAT è completo, le modifiche vengono unite a trunk .

Ora, diciamo che ho un programmatore che lavora su due rami di progetto. Li completano nello stesso giorno e ciascuno viene unito al ramo DevelopmentTeam , quindi QA , quindi UAT . Tuttavia, durante l'UAT, si scopre che sono necessarie alcune modifiche. Quindi il programmatore torna al suo ramo di progetto, apporta le modifiche, commette, quindi ricomincia la fusione della linea. Il problema è che i nuovi "conflitti" devono essere gestiti ad ogni unione.

Ho usato SVN per diversi anni, quindi capisco branching, tag, merging, commit, ecc. Ma, penso di aver bisogno di una lezione di "organizzazione" (per mancanza di un termine migliore).

Gli sviluppatori di note funzionano in rami separati invece che in trunk condivisi (ovvero "unstable") perché sto provando a configurare un sistema in cui il trunk esista come codice di "produzione" base. Qualunque cosa nel bagagliaio è considerata "live". Quindi i rami Dev, QA e UAT sono per ogni livello di test (il QA è il sito Web QA, l'UAT è il sito Web UAT).

    
posta Eric Belair 29.05.2013 - 20:51
fonte

2 risposte

5

I conflitti si verificano perché due persone cambiano la stessa parte del codice in modi diversi e incompatibili. Se ne vedi molti, questo dovrebbe sollevare alcune domande sulla tua metodologia di sviluppo di base.

In primo luogo, sembra che tu stia abusando della ramificazione piuttosto severamente. Dare ad ogni sviluppatore il proprio repository sostanzialmente elimina lo scopo di avere un sistema di controllo della versione collaborativo in primo luogo. (Sì, hai ancora i vantaggi di tenere una cronologia e una "macchina del tempo" a cui puoi tornare indietro, ma questo è solo metà del punto di un VCS quando hai un team di sviluppo.)

Il tuo progetto dovrebbe essere ramificato per versione: un ramo 3.0, un ramo 3.1, un ramo 3.2 e così via - non dallo sviluppatore. Quando hai bisogno di una revisione stabile di una versione per una versione, trasformala in un tag.

Se tutti gli sviluppatori fanno check-in allo stesso ramo (e sincronizzano frequentemente) riduce al minimo il numero di conflitti di merge che si verificano, perché avere un intervallo più breve tra le unioni significa che è meno probabile che due sviluppatori tocchino lo stesso codice senza sincronizzarsi .

Inoltre, prova ad assegnare aree specifiche del codebase a sviluppatori specifici. Di nuovo, questo riduce il numero di volte in cui le loro modifiche si sovrappongono, il che riduce i conflitti di fusione.

    
risposta data 29.05.2013 - 22:50
fonte
3

Il tuo problema è che non stai lavorando sulla stessa base di codice. Ogni sviluppatore ha il proprio codice base, a cui apparentemente è permesso divergere significativamente dal tronco (se non fosse divergente, non si avrebbe questo problema).

Penso che l'esistenza dei rami del "programmatore" sia davvero il problema qui. Probabilmente dovresti scegliere i rami per progetto, e quando promuovi la modifica al tronco, dovresti terminare il ramo, o almeno sincronizzare il tronco con le modifiche sul ramo.

Fare ciò manterrà la differenza tra i rami del progetto e il tronco al minimo e ridurrà al minimo i problemi durante l'unione.

Un altro modo per risolvere questo problema è quello di fare in modo che i programmatori prendano regolarmente le modifiche del tronco sulle loro diramazioni (probabilmente ogni giorno sarebbe il migliore). Questo di nuovo manterrà i loro rami il più possibile simili al tronco, riducendo ancora il fastidio durante l'unione.

    
risposta data 29.05.2013 - 23:23
fonte

Leggi altre domande sui tag