2008-09-10 7 views
19

Stiamo passando dallo stile check-out/modifica/check-in del sistema di controllo versione a Subversion e durante la valutazione abbiamo scoperto che quando si esegue 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 automaticamente unite/automaticamente.Posso disattivare l'unione automatica in Subversion?

Questo ci spaventa, poiché è possibile che questa unione, pur non producendo errori di compilazione, possa almeno introdurre alcuni errori logici che potrebbero non essere facilmente rilevati.

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

Quello che speravamo sarebbe stato che se dovesse verificarsi un'unione, allora i due file verrebbero mostrati e almeno una semplice opzione di accettazione/rifiuto verrà presentata, in modo tale che almeno siamo consapevoli che qualcosa è cambiato e viene data la possibilità di vedere se ha un impatto sul nostro codice.

C'è un modo per farlo con Subversion/TortoiseSVN? O siamo bloccati nelle nostre attuali modi di lavoro troppo e dovremmo lasciar fare è cosa ...

risposta

6

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

+3

Prima di notare eventuali modifiche svn si unirà volentieri ai tuoi file. Comunque è una buona idea controllare cosa è cambiato :-) – aku

+17

Perché ogni risposta a un problema educativo SVN? Questo non significa che lo strumento richiede una grande quantità di conoscenza tribale per funzionare e dovrebbe essere risolto? – whitey04

+2

"_Quando sarete in grado di vedere cosa è cambiato tra la vostra versione e l'ultima versione del repository_", che potrebbe non essere banale da ripristinare, specialmente nel caso in cui il file in questione sia ad esempio XML generato dal designer per qualcosa di simile a un grafico Strumento EAI. Punti per indovinare chi è appena stato bruciato durante l'aggiornamento di alcuni file generati da uno strumento grafico EAI :-). – Sepster

10

Ecco un trucco per TortoiseSVN:

How to turn off “auto-merge” in Subversion

trucco per svn.exe è quello di impostare svn strumento diff esterno a un programma che fallirà costantemente.

svn --diff-cmd=/bin/false 

Se il programma diff esterno non riesce, svn conclude che il conflitto è irrisolvibile e non unirlo.

+0

In questo caso svn 1.8 produce file di risultato vuoto –

+0

qualche idea su come posso usare qualcosa del genere ma con 'svn up'? –

1

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

I membri del team devono eseguire il check-in su una scala il più possibile piccola (pur mantenendo la correttezza) piuttosto che organizzare un intero giorno di lavoro per controllarlo una sola volta. Ciò ridurrà la possibilità di calpestare il lavoro di qualcun altro.

Se si è preoccupati per un particolare cambiamento che si sta facendo, Subversion fornisce un meccanismo di blocco per consentire di impedire altre modifiche al file. Vedi i capitoli Red Book su locking.

+5

Questo è un grosso problema con il "modello di sovversione". Presume che un'unione automatica abbia probabilmente successo. Non ho mai trovato uno strumento che possa fare in modo affidabile l'unione di codice senza l'intervento umano almeno il 50% delle volte. – whitey04

+2

Il check-in è frequente e continuo a scoprire che SVN rompe molte cose ogni volta che si uniscono automaticamente. – Sam

13

E 'nelle FAQ: How can I prevent Subversion from doing automatic merges?

  1. In TortoiseSVN-> Impostazioni-> Generale-> file di configurazione di Subversion, fare clic sul pulsante di modifica.
  2. modificare la sezione [helpers] aggiungendo

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

    (notare la doppia barra rovesciata)

  3. Creare il file C: \ false.bat quali contiene due linee

    @type %9 
        @exit 1 
    
+0

Il mio +1 per la risposta più autorevole. – Sepster

+0

Lo controllo e la soluzione non funziona per svn 1.8 –

0

Ecco perché il test automatizzato (unità) è un fondo parte fondamentale dello sviluppo del software distribuito. Nell'esempio che fornisci, almeno un test di unità dovrebbe fallire con l'aggiornamento di svn e avvisarti dell'errore.

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

+4

Il test dell'unità è utile e il superbo test dell'unità potrebbe eliminare questi tipi di problemi. Penso che il punto sia che sì, non si tratta di uno strumento di fusione del codice perfettamente funzionante (non può essere perfetto senza AI), quindi vogliamo essere in grado di disabilitare la fusione puramente automatica di parte di esso, almeno avere qualche interazione con l'utente con esso. –

+6

Il test dell'unità non giustifica l'automazione errata. – Sam

+0

I test delle unità non saranno mai in grado di catturare tutto ciò che potrebbe essere causato da questo. È solo un cattivo comportamento. – User

Problemi correlati