Czy istnieje polecenie wyświetlające konflikty SVN?

116

Czy ktoś zna polecenie SVN, aby wyświetlić bieżące konflikty między repozytorium a kopią roboczą?

Dzięki

azz0r
źródło

Odpowiedzi:

168

W systemie Linux, jeśli chcesz zobaczyć tylko konflikty, potokuj status przez grep.

svn status | grep -P '^(?=.{0,6}C)'
bratanek
źródło
6
Dodanie -A 1do argumentów grep spowoduje wyświetlenie linii po linii konfliktu, która czasami jest związana z konfliktem.
Wesley Hartford
4
-P mówi grepowi, aby używał wyrażenia regularnego perl, ^ = początek łańcucha, (? =) Zawiera wzorzec wyprzedzenia , który wynosi. {0,6} dowolne od 0 do 6 znaków i litera C, która jest wskaźnikiem konfliktów
Pete
5
Jaki jest sens używania części wyprzedzającej? Nie mógł również '^.{0,6}C'działać?
hans_meine
2
Aby użyć tego samego polecenia w OSX, musisz zainstalować GNU grep, ponieważ grep BSD nie ma flagi wyrażenia regularnego perl (-P)
G.Rassovsky
4
W systemie Windows wersja Powershell to(svn status) -Match '^(?=.{0,6}C)'
bstoney
28

Po prostu użyj grep!

svn st | grep '^C'
Joseph Lust
źródło
2
@sid, to wyrażenie regularne „zaczyna się od”, co oznacza, że ​​pierwszym znakiem jest C
Joseph Lust
1
Zastanawiałem się, czy można pominąć pliki, które mają status „A + C”… Czy to problem…
Raghav
2
egrep '^ [AC +] +' wystarczyłby wtedy, chociaż zazwyczaj nie mam problemów z A + C.
Joseph Lust,
1
Prosty do zapamiętania i wystarczający w większości przypadków. Dzięki @JosephLust.
csonuryilmaz
11

Możesz spróbować svn merge -r <revision> --dry-runzobaczyć, co się dzieje w ten sposób.

corsiKa
źródło
Wydaje się, że nie działa w systemie Windows ze svn 1.7.8. Dziennik błędów: svn: E205001: Wypróbuj 'svn help', aby uzyskać więcej informacji svn: E205001: Wymagane
scalenie
4

Jeśli masz potwierdzenie ze strony http://betterthangrep.com/ , możesz wykonać następujące czynności

svn st | ack '^C'
bananaaus
źródło
4

W przypadku programu Windows PowerShell użyj:

svn status | sls -Pattern '^(?=.{0,6}C)'
Ayo I
źródło
3

Jeśli już połączyłeś się, możesz użyć

svn status

i zobacz duże „C” dla konfliktu, ale zwykle nie powinieneś widzieć takiego rodzaju w kopii roboczej.

khmarbaise
źródło
1

Może być możliwe użycie svn merge --dryrunpodczas określania adresu URL repozytorium ze wszystkimi wersjami po ostatniej, którą zaktualizowałeś.

Np. Jeśli twój obecny WC jest oparty na wersji 147, może to zrobić:

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

To nic, co sam zrobiłem, więc musisz spróbować sam.

Anders Abel
źródło
0

Jeśli nie scaliłeś ani nie zaktualizowałeś plików, użyj poniższego polecenia

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

Krótko mówiąc

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

Szczegóły
SVN nie zaznacza statusu konfliktu (C), dopóki nie zaktualizujesz pliku (ów) za pomocą svn update.
Do tego czasu statusy są pokazane jak poniżej

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

M - Zmodyfikowane w lokalnym
* - Aktualizacje / Przychodzące ze zdalnego
M i * - Zmodyfikowane zarówno w lokalnym, jak i zdalnym - Jest to konflikt, ale svn jeszcze nie zaznaczył

Sameer Khan
źródło
-2

na mac

$ svn status | grep -e '^!'

wykonał pracę

oto człowiek dla grepa:

użycie: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C [numer]] [-e wzór] [-f plik] [--binary-files = wartość] [--color = kiedy] [--context [= num]] [--directories = action] [--label] [--line-buffered] [--null] [wzorzec] [plik ...]

znak letni
źródło
W jaki sposób dopasowanie wykrzyknika pomoże znaleźć elementy będące w konflikcie?
anddam
^!to wyrażenie regularne dla każdej linii zaczynającej się od !. Wszystkie sprzeczne linie zaczynają się od!
podsumowanie,
2
Nie, właśnie rozwiązałem konflikty w repozytorium 1.9, a linie konfliktu zaczynały się od „C”.
anddam