Есть ли команда для вывода списка конфликтов SVN?

116

Кто-нибудь знает команду SVN для перечисления текущих конфликтов между репо и рабочей копией?

Спасибо

azz0r
источник

Ответы:

168

В Linux, если вы хотите видеть только конфликты, передавайте статус через grep.

svn status | grep -P '^(?=.{0,6}C)'
nshew
источник
6
Добавление -A 1к аргументам grep покажет вам строку после строки конфликта, которая иногда связана с конфликтом.
Уэсли Хартфорд
4
-P указывает grep использовать регулярное выражение perl, ^ = начало строки, (? =) Заключить шаблон просмотра вперед , который есть. {0,6} любые символы от 0 до 6 и буква C, которая является индикатором конфликтов
Пит
5
В чем смысл использования опережающей части? Не могли '^.{0,6}C'работать?
hans_meine
2
Чтобы использовать эту же команду в OSX, вам необходимо установить GNU grep, потому что у BSD grep нет флага регулярного выражения Perl (-P)
Г.Рассовский
4
Для Windows это версия Powershell(svn status) -Match '^(?=.{0,6}C)'
bstoney
28

Просто используйте grep!

svn st | grep '^C'
Джозеф похоть
источник
2
@sid, это регулярное выражение для «начинается с», так что это означает, что первый символ - буква C
Джозеф Ласт,
1
Я подумал, может ли это пропустить файлы со статусом "A + C" .. Это проблема ..
Рагхав
2
egrep '^ [AC +] +' поможет тогда, хотя обычно у меня нет проблем с A + C.
Джозеф Ласт
1
Просто запомнить и достаточно для большинства случаев. Спасибо @JosephLust.
csonuryilmaz
11

Вы можете попробовать svn merge -r <revision> --dry-runи посмотреть, что в этом случае произойдет.

corsiKa
источник
Кажется, не работает в Windows с svn 1.7.8. Журнал ошибок: svn: E205001: Попробуйте 'svn help' для получения дополнительной информации svn: E205001: Требуется источник слияния
kakyo
4

Для Windows PowerShell используйте:

svn status | sls -Pattern '^(?=.{0,6}C)'
Айо я
источник
3

Если вы уже объединились, вы можете использовать

svn status

и видите заглавную букву "C" для конфликта, но обычно вы не должны видеть такой вид в своей рабочей копии.

khmarbaise
источник
1

Возможно, можно использовать svn merge --dryrunпри указании URL-адреса репозитория со всеми версиями после последней, которую вы обновили.

Например, если ваш текущий WC основан на ревизии 147, это может быть сделано:

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

Я ничего не сделал сам, так что вам придется попробовать самому.

Андерс Абель
источник
0

Если вы не объединяли или не обновляли файлы, используйте команду ниже

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

Коротко

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

Подробности
SVN не отмечает статус конфликта (C), пока вы не обновите файл (ы) с помощью svn update.
До тех пор статусы отображаются, как показано ниже

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

M - Изменено локально
* - Обновления / Входящие с удаленного
M и * - Изменено локально, а также удаленно - Это конфликт, но svn еще не отмечен

Самир Хан
источник
-2

на Mac

$ svn status | grep -e '^!'

сделал работу

вот человек для grep:

использование: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A число] [-B число] [-C [число]] [-e шаблон] [-f файл] [--binary-files = значение] [--color = when] [--context [= число]] [--directories = action] [--label] [--line-buffered] [--null] [шаблон] [файл ...]

thesummersign
источник
Как сопоставление восклицательного знака поможет найти конфликтующие элементы?
anddam
^!- это регулярное выражение для каждой строки, начинающейся с !. Все противоречивые строки начинаются с!
thesummersign
2
Нет, я только что разрешил конфликты в репо 1.9, и линии конфликта начинались с буквы «C».
anddam