Чи є команда для переліку конфліктів SVN?


116

Хтось знає команду SVN для переліку поточних конфліктів між репо та робочою копією?

Дякую

Відповіді:


168

У Linux, якщо ви хочете бачити лише конфлікти, передайте статус через grep.

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

6
Додавання -A 1до аргументів grep покаже вам лінію після лінії конфлікту, яка іноді пов'язана з конфліктом.
Веслі Хартфорд

4
-P повідомляє grep використовувати регекс perl, ^ = початок рядка, (? =) Додайте шаблону пошуку, який є. {0,6} будь-якими символами від 0 до 6 та буквою С, що є показником для конфліктів
Піт

5
Який сенс використання частини lookahead? Не могли б також '^.{0,6}C'працювати?
hans_meine

2
Щоб використовувати цю ж команду на OSX, вам потрібно встановити GNU grep, оскільки BSD grep не має прапора
пергекс-регексу

4
У Windows версії Powershell цього є(svn status) -Match '^(?=.{0,6}C)'
bstoney

28

Просто використовуйте grep!

svn st | grep '^C'

2
@sid, це regexp для 'починається з', так що це означає, що першим персонажем є C
Джозеф Похоть

1
Я думав, якщо це може пропустити файли, які мають статус "A + C". Це питання ..
Raghav

2
egrep '^ [AC +] +' зробив би трюк тоді, хоча у мене зазвичай немає проблем з A + C.
Йосип Похоть

1
Простий, щоб мати на увазі, і достатній для більшості випадків. Дякую @JosephLust
csonuryilmaz

11

Ви можете спробувати svn merge -r <revision> --dry-runпобачити, що відбувається саме так.


Схоже, не працює в Windows із svn 1.7.8. Журнал помилок: svn: E205001: Спробуйте 'help svn' для отримання додаткової інформації svn: E205001: Потрібно об'єднати джерело
kakyo


4

Для Windows PowerShell використовуйте:

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

3

Якщо ви вже зрослися, ви можете використовувати

svn status

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


1

Можливо, це можливо використовувати svn merge --dryrun, вказуючи URL-адресу сховища з усіма версіями після останньої, яку ви оновили.

Наприклад, якщо ваш поточний туалет заснований на редакції 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 [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A число] [-B число] [-C [num]] [-e pattern] [-f файл] [--binary-files = value] [--color = when] [--context [= num]] [--directories = action] [- мітка] [--буферизований] [--null] [pattern] [файл ...]


Яким чином відповідні знаки оклику допоможуть знайти суперечливі предмети?
anddam

^!- це регулярний вираз для кожного рядка, з якого починається !. Всі суперечливі рядки починаються з!
підсумкового знаку

2
Ні, я щойно вирішував конфлікти на 1.9 репо, і лінії конфлікту починалися з просто "С".
anddam
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.