Можно ли всегда (принудительно) перезаписывать локальные изменения при обновлении из SVN?Игнорировать конфликты? - PullRequest
59 голосов
/ 14 сентября 2010

Я знаю, что должен работать над собственной веткой, но пара из нас находится в одной ветке проекта.Один из разработчиков сделал коммит, и я просто хотел обновить свою локальную копию до последней из SVN.Запустив 'svn update', я получаю следующие выходные данные:

Restored 'index.html'
U    somescript.php
Conflict discovered in file.xml'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: 

Есть ли возможность / способ перезаписать мои локальные изменения и получить последние файлы из subversion и игнорировать все конфликты?

Я просмотрел некоторые другие посты в стеке, и все они не отвечают на вопрос.Они говорят, чтобы удалить проект и снова оформить заказ, что, я думаю, если это лучший способ, так и быть ... Но мне нужно больше подробностей о том, почему я не могу заставить обновление.Спасибо

РЕДАКТИРОВАТЬ:

Итак, я выбрал 'показать все параметры':

(s) показать все параметры: s

  (e)  edit             - change merged file in an editor
  (df) diff-full        - show all changes made to merged file
  (r)  resolved         - accept merged version of file

  (dc) display-conflict - show all conflicts (ignoring merged version)
  (mc) mine-conflict    - accept my version for all conflicts (same)
  (tc) theirs-conflict  - accept their version for all conflicts (same)

  (mf) mine-full        - accept my version of entire file (even non-conflicts)
  (tf) theirs-full      - accept their version of entire file (same)

  (p)  postpone         - mark the conflict to be resolved later
  (l)  launch           - launch external tool to resolve conflict
  (s)  show all         - show this list

Я думаю,Я должен пойти с опцией 'tc'?

Ответы [ 5 ]

73 голосов
/ 15 сентября 2010

Если вам действительно нужна копия HEAD (последняя версия в репозиториях), тогда вам следует

svn revert -R <path> // discard all your changes inside path (recursive)
svn update           // get latest revision of all files (recursive)

Вот и все.

Остерегайтесь того, что вы потеряете ВСЕ свои изменения с момента последнего 'коммита'.

РЕДАКТИРОВАТЬ: добавил -R <path> из Isu_guy ответ ради полноты и помочь читателям найти один полный ответ

28 голосов
/ 27 мая 2012

ответ Тато абсолютно верен, и, пожалуйста, учтите его осторожность. Вы потеряете ВСЕ ваши изменения. Просто уточнение синтаксиса и некоторые нюансы

svn revert нерекурсивен по умолчанию и требует пути для работы. Чтобы сделать рекурсивно добавить "-R". Если вы находитесь в текущем каталоге, используйте «./» для «пути» ниже или используйте абсолютный путь, например «/ path_to_your_folder»

svn revert -R <path>

svn обновление рекурсивно. Если вы находитесь в каталоге, вам вообще не нужен путь

svn update
27 голосов
/ 08 октября 2012

Я бы сделал это:

svn up --accept tf

или

svn up --accept theirs-full

При этом «svn revert -R» и «svn up» в корне вашей рабочей копиитакже сделать трюк.В моем случае у меня есть несколько WC для разных проектов, поэтому я запускаю сценарий оболочки, который обновляет их при запуске компьютера.Я не использую accept, скорее я использую «--accept p», чтобы отложить разрешение, поскольку это автоматизированный процесс, затем я объединяю любые конфликты, которые SVN не может автоматически объединить самостоятельно (обычно это включает в себя возврат, но это зависит).

16 голосов
/ 26 сентября 2013

При использовании SVN 1.6.11 (поставляется CentOS 6.4) команда Carnix должна выглядеть следующим образом:

svn up --accept theirs-full

(не могу добавить комментарий, так как у меня недостаточно репутации)

2 голосов
/ 23 апреля 2015

Отвечая на ваш первый вопрос. Нет . Но вы можете переопределить ваши локальные файлы, выполнив следующие команды из корня вашего проекта:

svn revert -R .
svn update

Это работало на моем Mac с SVN 1.7.19 и Ubuntu с SVN 1.8.8

...