Esiste un comando per elencare i conflitti SVN?


116

Qualcuno conosce un comando SVN per elencare i conflitti correnti tra il repository e la copia di lavoro?

Grazie

Risposte:


168

Su Linux, se vuoi vedere solo i conflitti, reindirizza lo stato attraverso grep.

svn status | grep -P '^(?=.{0,6}C)'

6
L'aggiunta -A 1agli argomenti grep ti mostrerà la riga dopo la riga del conflitto, che a volte è correlata al conflitto.
Wesley Hartford

4
-P dice a grep di usare perl regex, ^ = start of string, (? =) Racchiude il pattern lookahead che è. {0,6} qualsiasi carattere da 0 a 6 e la lettera C, che è l'indicatore di conflitti
Pete

5
Qual è il punto di utilizzare la parte lookahead? Non potrebbe '^.{0,6}C'funzionare anche tu?
hans_meine

2
Per utilizzare questo stesso comando su OSX, è necessario installare GNU grep perché grep BSD non ha il flag perl regex (-P)
G.Rassovsky

4
Su Windows la versione Powershell di questo è(svn status) -Match '^(?=.{0,6}C)'
bstoney

28

Usa grep!

svn st | grep '^C'

2
@sid, è regexp per "inizia con", quindi significa che il primo carattere è una C
Joseph Lust

1
Stavo pensando se questo potesse perdere i file che hanno lo stato "A + C" .. È un problema ..
Raghav

2
egrep '^ [AC +] +' farebbe il trucco allora, anche se di solito non ho problemi A + C.
Joseph Lust,

1
Semplice da tenere a mente e sufficiente per la maggior parte dei casi. Grazie @JosephLust.
csonuryilmaz

11

Potresti provare a svn merge -r <revision> --dry-runvedere cosa succede in quel modo.


Non sembra funzionare su Windows con svn 1.7.8. Registro errori: svn: E205001: prova "svn help" per maggiori informazioni svn: E205001: unione sorgente richiesta
kakyo


4

Per l'utilizzo di Windows PowerShell:

svn status | sls -Pattern '^(?=.{0,6}C)'

3

Se ti sei già unito puoi usare

svn status

e vedi una "C" maiuscola per il conflitto, ma di solito non dovresti vedere questo tipo nella tua copia di lavoro.


1

È forse possibile utilizzarlo svn merge --dryrunmentre si specifica l'URL del repository con tutte le revisioni dopo l'ultima con cui hai aggiornato.

Ad esempio, se il tuo attuale WC è basato sulla revisione 147, questo potrebbe farlo:

svn merge -r 148:HEAD http://url.to.repo/repo/

Non è niente che ho fatto io stesso, quindi dovrai provarlo tu stesso.


0

Se non hai unito o aggiornato i file, usa il comando seguente

svn status --show-updates | grep -P '.*(?=.*M)(?=.*\*).*'

In breve

svn st -u | grep -P '.*(?=.*M)(?=.*\*).*'

Dettagli
SVN non contrassegna lo stato di conflitto (C) finché non aggiorni i file utilizzando svn update.
Fino ad allora gli stati sono mostrati come di seguito

+---+------+---------------+---------------+
| M |      |               | 23246   file1 |
+---+------+---------------+---------------+
|   |      | *             | 23233   file2 |
+---+------+---------------+---------------+
| M |    * | 23233   file3 |               |
+---+------+---------------+---------------+

M - Modificato in locale
* - Aggiornamenti / In arrivo da remoto
M e * - Modificato in locale, oltre che remoto - Questo è un conflitto ma svn non è stato ancora contrassegnato


-2

su mac

$ svn status | grep -e '^!'

ha fatto il lavoro

ecco l'uomo per grep:

utilizzo: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C [num]] [-e pattern] [-f file] [--binary-files = value] [--color = when] [--context [= num]] [--directories = action] [--label] [--line-buffered] [--null] [pattern] [file ...]


In che modo la corrispondenza di un punto esclamativo aiuta a trovare elementi in conflitto?
anddam

^!è la regex per ogni riga che inizia con !. Tutte le righe in conflitto iniziano con!
cartello dell'estate

2
No, ho appena risolto i conflitti su un repository 1.9 e le linee di conflitto cominciavano solo con "C".
anddam
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.