Domanda

Stiamo cercando di passare da uno stile di check-out/modifica/check-in del sistema di controllo della versione a Subversion e durante la valutazione abbiamo scoperto che quando esegui un'azione di aggiornamento in TortoiseSVN (e presumibilmente in qualsiasi client Subversion?), se le modifiche nel repository che devono essere applicate ai file che hai modificato non causano conflitti, verranno unite automaticamente/silenziosamente.

Questo ci spaventa un po', in quanto è possibile che questa fusione, pur non producendo errori di compilazione, possa almeno introdurre alcuni errori logici che potrebbero non essere facilmente rilevabili.

Esempio molto semplice:Sto lavorando all'interno di un metodo C# modificando parte della logica nell'ultima parte del metodo e qualcun altro modifica il valore su cui una variabile viene inizializzata all'inizio del metodo.La modifica dell'altra persona non è nelle righe di codice su cui sto lavorando, quindi non ci sarà conflitto;ma è possibile modificare radicalmente l'output del metodo.

Ciò che speravamo fosse che, se fosse necessaria un'unione, i due file sarebbero stati mostrati e sarebbe stata presentata almeno una semplice opzione di accettazione/rifiuto della modifica, in modo che almeno fossimo consapevoli che qualcosa è cambiato e viene data la possibilità di vedere se influisce sul nostro codice.

C'è un modo per farlo con Subversion/TortoiseSVN?Oppure siamo troppo bloccati nel nostro modo di lavorare attuale e dovremmo semplicemente lasciare che faccia la sua cosa...

È stato utile?

Soluzione

Il modo migliore per aggirare questo problema è educare gli sviluppatori.Dopo aver eseguito un aggiornamento in TortoiseSVN viene visualizzato un elenco dei file interessati.Basta fare doppio clic su ciascun file per ottenere la differenza tra loro.Quindi sarai in grado di vedere cosa è cambiato tra la tua versione e l'ultima versione del repository.

Altri suggerimenti

È nelle FAQ:Come posso impedire a Subversion di eseguire unioni automatiche?

  1. In TortoiseSVN->Impostazioni->Generale->File di configurazione Subversion, fai clic sul pulsante Modifica.
  2. Cambiare il [helpers] sezione aggiungendo

      diff-cmd = "C:\\false.bat"
    

    (notare la doppia barra rovesciata)

  3. Crea il file C:\false.bat che contiene due righe

      @type %9
      @exit 1
    

Ecco un trucco per TortoiseSVN:

Come disattivare la "unione automatica" in Subversion

Il trucco per svn.exe è impostare lo strumento diff esterno svn su un programma che fallirà costantemente.

svn --diff-cmd=/bin/false

Se il programma diff esterno fallisce, svn conclude che il conflitto è irrisolvibile e non lo unirà.

Ti suggerirei di imparare a lavorare con il modello Subversion naturale, se possibile.In pratica riscontriamo che i conflitti sono rari e il tipo di conflitto logico di cui parli quasi inesistente (non riesco a ricordare un caso negli ultimi 4 anni nel nostro repository).

I membri del team dovrebbero effettuare il check-in delle modifiche sulla scala più piccola possibile (pur mantenendo la correttezza) anziché accumulare un'intera giornata di lavoro per effettuare il check-in una sola volta.Ciò ridurrà la possibilità di calpestare il lavoro di qualcun altro.

Se sei preoccupato per una particolare modifica che stai apportando, Subversion fornisce a bloccaggio meccanismo per consentire di impedire altre modifiche al file.Vedi il libro rosso capitoli su bloccaggio.

Questo è il motivo per cui i test (unitari) automatizzati sono una parte fondamentale dello sviluppo di software distribuito.Nell'esempio fornito, almeno uno unit test dovrebbe fallire durante l'aggiornamento svn e avvisarti dell'errore.

Ricorda cos'è Subversion:un sistema di controllo della versione, non uno strumento di fusione del codice perfettamente funzionante.

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