Come vedere cosa verrà aggiornato dal repository prima di emettere il comando "svn update"?


115

Ho trasferito modifiche in numerosi file a un repository SVN da Eclipse.

Vado quindi alla directory del sito Web sulla casella Linux in cui voglio aggiornare queste modifiche dal repository alla directory lì.

Voglio dire "svn update project100" che aggiornerà le directory sotto "project100" con tutti i miei file aggiunti e modificati, ecc.

TUTTAVIA, non voglio necessariamente aggiornare le modifiche che non ho fatto. Quindi ho pensato di poter dire "svn status project100" ma quando lo faccio ottengo un elenco completamente diverso di modifiche che verranno apportate, nessuna delle mie è nell'elenco, il che è strano.

Quindi per essere sicuro che solo le mie modifiche vengano aggiornate nella directory web, sono costretto a navigare in ogni directory in cui so che c'è una modifica che ho fatto e ad aggiornare esplicitamente solo quei file, ad esempio "svn update newfile1.php" ecc. che è noioso.

Qualcuno può far luce sulla procedura di lavoro standard qui, ovvero come posso ottenere un elenco accurato di tutte le modifiche che stanno per essere apportate prima di eseguire il comando "svn update"? Ho pensato che fosse il comando "status".

Risposte:


167

Provare:

svn status --show-updates

o (lo stesso ma più breve):

svn status -u

9
o più breve: svn st -u
Kenyakorn Ketsombut

Cosa significano le X nell'output?
IgorGanapolsky

1
Inoltre, utilizzare: svn status -q -u... Mostra solo le modifiche agli aggiornamenti e le modifiche locali relative ai file appartenenti al repository. Non si ottengono punti interrogativi (?) Da file non di repository.
saranno

56

A seconda di ciò che vuoi sapere tra la tua copia di lavoro e l'ultimo repository del server svn, senza aggiornare la tua copia di lavoro locale, ecco cosa puoi fare:

se vuoi sapere cosa è stato modificato nel repository del server svn, esegui il comando:

$ svn st -u

se vuoi sapere se lo stesso file è stato modificato sia nella tua copia di lavoro locale che nel repository del server svn, esegui il comando:

$ svn st -u | grep -E '^M {7}\*'

se vuoi ottenere l'elenco dei file modificati tra una particolare revisione e HEAD, esegui il comando:

$ svn diff -r revisionNumber:HEAD --summarize

se vuoi ottenere un elenco di file modificati tra revisioni particolari, esegui il comando:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

se vuoi vedere cosa verrà aggiornato (senza effettivamente aggiornare), esegui il comando:

$ svn merge --dry-run -r BASE:HEAD .

se vuoi sapere quale contenuto di un particolare file è stato modificato nel repository del server svn rispetto alla tua copia di lavoro, esegui il comando:

$ svn diff -r BASE:HEAD ./pathToYour/file

se vuoi sapere quali contenuti di tutti i file sono stati modificati nel repository del server svn rispetto alla tua copia di lavoro, esegui il comando:

$ svn diff -r BASE:HEAD .

43

Puoi vedere cosa verrà aggiornato (senza effettivamente aggiornare) emettendo:

svn merge --dry-run -r BASE:HEAD .

Maggiori dettagli qui .


Sopra non ha funzionato per me, ho dovuto correresvn merge --dry-run --revision BASE:HEAD .
Znarkus

3
Recupero di "svn: E195020: impossibile unire in una copia di lavoro a revisione mista [16032: 16061]; provare prima ad aggiornare"
Hubert Grzeskowiak

Ottima risposta - peccato che non funzioni su copie di lavoro con revisioni miste .. Questo mi impara
Gerard ONeill

2
@HubertGrzeskowiak - Adoro l'ironia q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm

17

Questo è quello che stavo cercando. svn helpHo controllato prima Google, ma alla fine è arrivato per me :)

svn diff -r BASE:HEAD .


0

Puoi usare 'svn diff' per vedere la differenza tra la tua copia di lavoro e il repository.


9
Sbagliato. Quelli elencherebbero solo le differenze tra te e l'ultima volta che hai sincronizzato con il repository. Non vedrai differenze che altre persone hanno inserito nel repository nel frattempo. L'OP vuole sapere quali sono questi cambiamenti, senza applicarli tramite esvn update
mail

@Andrew intendeva suggerire che l'OP esegua 'svn diff -r HEAD URL' per vedere la differenza tra i file estratti e ciò che è archiviato come HEAD o versione principale nel repository.
Mac

0

In teoria potresti apportare tutte le tue modifiche in un ramo che hai creato per uso personale. Saresti quindi ragionevolmente sicuro di essere l'unico a impegnarti.

Lo sviluppo delle funzionalità IMHO dovrebbe essere fatto in questo modo.

Quindi è possibile aggiornare questa macchina di destinazione da questo ramo invece che dal tronco.

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.