2015-01-19 20 views
17

Sto cercando di imparare le basi del controllo di versione di Eric Sink - http://ericsink.com/vcbe/vcbe_usletter_lo.pdfRisoluzione di un conflitto di unione quando faccio svn update

Sono a pagina 22 ora. Descriverò lo scenario per te. Due utenti sullo stesso computer, harry e sally stanno lavorando su un file chiamato lottery.c che è memorizzato in un repository chiamato lotteria.

1 - Harry esegue il primo/primo codice. 2 - Sally lo cambia e si impegna. 3 - Mentre 2 sta accadendo, harry ha apportato delle modifiche, ma non ha eseguito il commit. 4 - Harry commette e ottiene un errore.

Transmitting file data .svn: Commit failed (details follow): 
svn: File '/lottery.c' is out of date 

5 - Per risolvere il problema, Harry aggiornerà la sua copia locale tramite svn update.

Questo è dove ho un problema! L'autore dice l'output è:

lottery harry$ svn update 
G lottery.c 
Updated to revision 2. 

Ma, la mia uscita è:

lottery harry$ svn update 
Updating '.': 
C lottery.c 
Updated to revision 2. 
Conflict discovered in file 'lottery.c'. 
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge, 
     (mc) my side of conflict, (tc) their side of conflict, 
     (s) show all options: 

io sono nuovo e non so come rispondere a questo messaggio. Il mio libro è sbagliato? Mi aiuti per favore. Grazie.

+0

sto usando tc per ora. Immagino che sia ciò che l'autore avrebbe potuto significare. – Steam

risposta

30

Quando più persone cambiano lo stesso file in una volta, è possibile che entrambe cambino le stesse linee. Questo è quello che ti è successo. Sally cambia le stesse linee che Harry stava cambiando. Quando Harry ha fatto il svn update, Subversion lo ha rilevato e ti sta chiedendo cosa fare.

Una parola di avvertimento: a volte Subversion sta cercando solo le differenze in una linea tra la tua versione e la loro versione, e non differenze significative. Ad esempio, se il rientro di una linea è stato modificato, o la spaziatura era diversa, o se hai cambiato le estremità della linea, Subversion lo dichiarerà come un conflitto anche se probabilmente non lo è. Questo forse perché il libro non ha trovato questo problema, ma l'hai fatto. Non significa che hai fatto qualcosa di sbagliato.

Cosa fare? Subversion ti sta dando alcune scelte.

  • rinviarep: Questo è quello che faccio di solito con questo tipo di situazione.Subversion incorporare nel file marcatori diff che assomigliano a questo nel file:

 

<<<<<<< .mine 
foobar 
======= 
fubar 
>>>>>>> .rxxx 

questo è che vi mostra i cambiamenti nella revisione Rxxx (quello di Sally ha) sembrano vs. i cambiamenti che hai (le modifiche di Harry). Di solito, i cambiamenti sono abbastanza lievi da rendere abbastanza facile capire cosa fare.

  • spettacolo diffdf: Questo ti mostrerà le differenze tra le modifiche (Harry) e ciò che è nell'altra revisione (Sally). In pratica ti mostra i marcatori di diff.
  • modificae: È possibile modificare il conflitto di unione mentre si esegue l'unione anziché attendere fino a un momento successivo.
  • unionem: Non sono sicuro di cosa faccia. Stai facendo l'unione in questo momento, quindi non ha molto senso.
  • la loro parte di conflittotc: accettare ciò che ha fatto Sally per risolvere il conflitto. Probabilmente devi rifare le modifiche, ma almeno stai considerando le modifiche di Sally.
  • il mio lato del conflittomc: lo scenario più pericoloso perché stai ignorando completamente le modifiche di Sally. Sally ha fatto una correzione e forse lo stai stemperando. Quando uscirà la versione e la correzione di Sally non è inclusa, verrai accusato di aver rimosso la modifica. Quindi, perché lo fai? Perché hai già guardato i cambiamenti e realizzato che il conflitto non era molto conflitto. È stato un cambiamento di indentazione o qualcosa di simile. O hai chiamato una variabile increment e Sally l'ha chiamata counter.

Come ho detto, faccio di solito un rinviare, lasciare che il mio finitura aggiornamento, quindi gestire i problemi.

Una volta risolto il problema, fai un svn resolved su quel file per far sapere a Subversion che hai risolto il conflitto.

Ci sono altre scelte: ad esempio, è possibile avviare uno strumento di diff/merge di terze parti per gestire il conflitto.

Per ulteriori informazioni, consultare il manuale di Subversion on line su resolving merge conflicts.

1

La "G" indica che il file è stato modificato da qualcun altro, ma le modifiche apportate da tale persona erano in una parte diversa del file, quindi SVN potrebbe unirlo per te senza chiedere aiuto.

La "C" indica che non solo il file è stato modificato da qualcun altro, ma le loro modifiche sono state apportate alle stesse linee modificate, quindi SVN non sa cosa fare. Ora è TUO il tuo lavoro fare l'unione.

Probabilmente non hai fatto nulla di sbagliato, e il libro non è sbagliato, hanno semplicemente omesso i dettagli su quali sono stati i cambiamenti specifici, apparentemente.

4

Se si seleziona l'opzione s vi mostrerà:

(e) edit    - change merged file in an editor 
(df) diff-full  - show all changes made to merged file 
(r) resolved   - accept merged version of file 

(dc) display-conflict - show all conflicts (ignoring merged version) 
(mc) mine-conflict - accept my version for all conflicts (same) 
(tc) theirs-conflict - accept their version for all conflicts (same) 

(mf) mine-full  - accept my version of entire file (even non-conflicts) 
(tf) theirs-full  - accept their version of entire file (same) 

(p) postpone   - mark the conflict to be resolved later 
(l) launch   - launch external tool to resolve conflict 
(s) show all   - show this list 

Usa dc per visualizzare i confilicts allora si può decidere la migliore opzione per utilizzare

Problemi correlati