Nell'esplorare funzionalità in Subversion, ho cercato di testare il caso d'uso descritte nel Annullamento Modifiche sottosezione della sezione di base fusione delle ramificazione e la fusione capitolo del svnbook. Sto usando la versione 1.6.4, ma il testo per quella sezione è lo stesso in entrambe le versioni del libro.conflitto quando si tenta Annullare le modifiche esempio in Subversion
Nella mia directory di copia di lavoro, modifico un file testcode.py, aggiungendo una riga per modifica e confermando dopo ogni modifica. Dopo diversi commit, il file si legge come segue:
this is my first import to trunk. r1.
this is my first commit, first edit of testcode.py. r2.
this is another edit of testcode.py. r3.
this is an edit of testcode.py. i'll get rid of this one. r4.
this is another edit of testcode.py. keeping it. r5.
yet another edit. keeping it. r6.
I numeri di revisione nella partita repository fino alle righe nel file in modo tale che nel /trunk/[email protected], l'ultima riga del file è quello che termina con rN. Quello che voglio fare è rimuovere la riga che termina in r4, mantenendo tutto il resto prima e dopo invariato.
Seguendo l'esempio nella sezione Annullare le modifiche del svnbook, faccio funzionare l'ordine
svn merge -c -4 file:///path_to_repos/trunk
Questo crea un conflitto (su corsa che comando, non il commit), per cui il file di unione a sinistra contiene tutto fino alla riga r4 e il file merge-right contiene tutto fino alla riga r3. In altre parole, invece di rimuovere una modifica passata, sembra che il comando voglia ripristinare l'intero file alla versione 3 o 4, rimuovendo le modifiche nelle revisioni successive (5 e 6, in questo caso).
Il modo in cui leggo l'esempio nel svnbook, che ha l'utente che inverte una modifica impegnata nella revisione 303 e che commette il risultato in revisione 350 senza conflitti, il comando che ho eseguito dovrebbe aver prodotto un file con uno stato svn di M che conserva tutte le righe tranne quella che termina in r4.
Sto leggendo l'esempio del libro in modo errato, l'esempio è sbagliato, oppure c'è qualche altra forma di errore utente in cui sono caduto inconsapevolmente?
Decisamente riproducibile. Ora devi pensare perché succede. –
Creare una patch con 'svn diff -c -4 foo.txt> foo.patch' e quindi applicarla a' foo.txt @ HEAD' funziona come previsto - rimuove la riga r4. –
Quindi le patch funzionano, ma "un caso d'uso estremamente comune per ** svn merge **," come dice il libro svn, un semplice che ha la sua sottosezione, semplicemente no. Ciò non ispira fiducia nel comportamento della funzione di fusione di Subversion in procedure più complesse, come il reinserimento di rami. – krosbonz