Subversion: come confrontare le differenze tra le modifiche in arrivo?


19

Vorrei vedere le modifiche apportate dai miei colleghi prima di accettare le modifiche in arrivo.

Quindi inizio ottenendo lo stato

svn st -u

... il che mi dice che ho un cambiamento in arrivo

    *     9803   incomingChanges.html
M         9803   localChanges.html
M   *     9803   localAndIncoming.html

Posso vedere cosa ho cambiato

svn diff localChanges.html

... ma come posso diff localAndIncoming.htmlper mostrare cosa è stato modificato e in che modo è diverso dalla mia copia di lavoro?


Non una risposta alla tua domanda da riga di comando, ma: alla fine, una volta che sai cosa è diverso dalla tua copia di lavoro, probabilmente vorrai unire le modifiche al repository con le tue modifiche. Quando si utilizza una GUI per farlo, perché non utilizzare una GUI per aiutarti a fare anche il diff iniziale? Strumenti come TortoiseSVN offrono questo confronto. Inoltre, IDE come Eclipse possono rendere molto semplice la revisione delle modifiche in arrivo (anche quando non c'è nulla da unire - bello avere un'idea di ciò che i colleghi hanno fatto) molto facilmente , evitando le fusioni automatiche.
Arjan,

1
Esiste un modo GUI per visualizzare le modifiche in arrivo utilizzando TortoiseSVN?
Christian,

Vorresti anche diff anche incomingChanges.html, no?
Raffi Khatchadourian,

Risposte:



2

FYI svn difffornisce un diff in base al file non modificato archiviato nella .svndirectory, non in base alla versione live repo.

Puoi correre svn updateper ottenere sovversione per tentare un aggiornamento (e possibilmente unire) e poi fare un svn diff, ma non è così pulito come immagino tu voglia.

Finalmente svn diffsupporta il diffing solo sul repository. Esempio:

svn diff svn://svnserver/repo/localChanges.html -r REV_NO

Il valore predefinito è il confronto tra HEAD e la revisione approvata.


2

Con tartaruga (se usi Windows)

  • Richiama la schermata del registro

  • Seleziona la revisione della testa

  • Fare clic con il tasto destro su localAndIncoming.html

  • Scegli Confronta con copia di lavoro


0

Non puoi davvero fino a quando non scarichi effettivamente la nuova versione. Limitazioni come questa erano una delle ragioni principali per cui un nuovo tipo di controllo del codice sorgente è diventato popolare recentemente. Si chiama controllo del codice sorgente decentralizzato.
Con questo nuovo modulo hai il tuo repository locale e puoi quindi prendere le modifiche dal repository principale ed eseguire un diff su di esso, se non ti piacciono le modifiche apportate puoi ripristinare il tuo repository e passare da lì.

http://mercurial.selenic.com/

E sì, so che suggerire di cambiare prodotto non è una soluzione ottimale, ma è comunque una soluzione.


0

Fai un altro checkout in una nuova cartella.

cd ..
svn checkout  /path/to/repo clean_working_copy

Se riutilizzi clean_working_copy non dimenticare di aggiornare prima

svn update clean_working_copy

Quindi confronta il tuo file con quello di clean_working_copy

diff your_working_copy/localAndIncoming.html clean_working_copy/localAndIncoming.html

O con il tuo diff preferito a 3 vie (il mio è kdiff3)

kdiff3 --L1 Base --L2 theirs --L3 mine your_working_copy/.svn/text-base/localAndIncoming.html clean_working_copy/localAndIncoming.html your_working_copy/localAndIncoming.html

Questo lavoro, ma uno scm dovrebbe fornire un modo più integrato.
RDS

0

penso

svn diff -r HEAD

ti dà quasi quello che vuoi. L'unica cosa è che + e - sono invertiti rispetto a quello che ti aspetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.