SVN Merge объединить дополнительные вещи - PullRequest
11 голосов
/ 07 августа 2008

Я только что сделал слияние, используя что-то вроде:

svn merge -r 67212:67213 https://my.svn.repository/trunk .

У меня было только 2 файла, один из которых простой ChangeLog. Вместо того, чтобы просто объединить мои ChangeLog изменения, он фактически вытянул мои плюс некоторые предыдущие, которых не было в пункте назначения ChangeLog. Я заметил, что был конфликт, когда я выполнил --dry-run, поэтому я обновил ChangeLog, и все еще был конфликт (и я видел конфликт, когда выполнял фактическое слияние).

Позже я обнаружил файл, из которого я сливал:

svn diff -r 67212:67213 ChangeLog

И я вижу только те изменения, которые я сделал, поэтому я знаю, что дополнительные изменения как-то туда не попали.

Это заставляет меня беспокоиться, что слияние на самом деле не просто берет то, что я изменил, что я и ожидал. Кто-нибудь может объяснить, что случилось?

ОБНОВЛЕНИЕ: В ответ на NilObject:

Итак, у меня изменилось 2 файла, релевантно только ChangeLog, остальные слились нормально. Когда я перехожу к своей обычной проверке сундука, я выполняю команду diff выше и вижу:

Index: ChangeLog
===================================================================
--- ChangeLog   (revision 67212)
+++ ChangeLog   (revision 67213)
@@ -1,3 +1,7 @@
+2008-08-06  Mike Stone  <myemail>
+
+   * changed_file: Details.
+
 2008-08-06  Someone Else  <their_email>

    * theirChanges: Details.

После моего слияния предыдущих изменений diff of ChangeLog выглядит так:

Index: ChangeLog
===================================================================
--- ChangeLog   (revision 67215)
+++ ChangeLog   (working copy)
@@ -1,3 +1,14 @@
+<<<<<<< .working
+=======
+2008-08-06  Mike Stone  <myemail>
+
+   * changed_file: Details.
+
+2008-08-06  Someone Else  <their_email>
+
+   * theirChanges: Details.
+
+>>>>>>> .merge-right.r67213
 2008-08-05  Someone Else2  <their2_email>

    * olderChange: Details.

Обратите внимание, что запись, которая была неправильно извлечена, не была в файле, с которым я ее объединяю, но все же это не было одним из моих изменений и не должно было быть объединено в любом случае. Это было легко исправить (убрать лишние строки, которые не были частью моих изменений), но это все равно заставляет меня беспокоиться об автоматическом слиянии в SVN.

Ответы [ 2 ]

2 голосов
/ 17 августа 2008

Это происходит только с конфликтами - в основном svn пытался объединить изменения, но (грубо говоря) видел изменение как:

Добавить

2008-08-06  Mike Stone  <myemail>

* changed_file: Details.

до

2008-08-06  Someone Else  <their_email>

И он не смог найти строку Someone Else во время слияния, поэтому добавил этот бит для контекста, вставляя конфликт. Если бы это было не конфликтующее слияние, то были бы применены только те изменения, которые вы ожидали.

0 голосов
/ 07 августа 2008

На самом деле недостаточно информации, чтобы продолжить.

svn merge -r 67212:67213 https://my.svn.repository/trunk .

объединит все файлы, измененные в ревизии 67212 в папке / trunk в хранилище, и объединит их с вашим текущим рабочим каталогом. Если вы делаете:

svn log -r 67212

Какие файлы, которые он показывает, изменились? Слияние будет извлекать изменения только из первого аргумента и применять их ко второму. Он не загружается обратно на сервер в первом аргументе.

Если это не отвечает на ваш вопрос, не могли бы вы опубликовать более подробную информацию о том, что именно происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...