Я только что сделал слияние, используя что-то вроде:
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
.
Это происходит только с конфликтами - в основном svn пытался объединить изменения, но (грубо говоря) видел изменение как:
Добавить
2008-08-06 Mike Stone <myemail>
* changed_file: Details.
перед
2008-08-06 Someone Else <their_email>
И он не мог найти строку Someone Else во время слияния, поэтому добавил этот бит для контекста, вставляя конфликт. Если бы это было бесконфликтное слияние, то были бы применены только те изменения, которые вы ожидали.
На самом деле не достаточно информации, чтобы продолжать здесь.
svn merge -r 67212:67213 https://my.svn.repository/trunk .
объединит любые файлы, измененные в ревизии 67212 в папке / trunk в хранилище, и объединит их с вашим текущим рабочим каталогом. Если вы делаете:
svn log -r 67212
Какие файлы он показывает, изменились? Слияние будет извлекать изменения только из первого аргумента и применять их ко второму. Он не загружается обратно на сервер в первом аргументе.
Если это не отвечает на ваш вопрос, не могли бы вы опубликовать более подробную информацию о том, что именно происходит?