SVN merge объединил дополнительные материалы
Вопрос
Я только что выполнил слияние, используя что-то вроде:
svn merge -r 67212:67213 https://my.svn.repository/trunk .
У меня было только 2 файла, один из которых является простым ChangeLog
.Вместо того, чтобы просто объединить мои ChangeLog
изменения, на самом деле это потянуло мои плюс некоторые предыдущие, которых не было в пункте назначения ChangeLog
.Я заметил, что при выполнении --dry-run возник конфликт, поэтому я обновил ChangeLog
, и конфликт все еще был (и я увидел конфликт, когда производил фактическое слияние).
Затем я позже разобрался с файлом, из которого я объединял:
svn diff -r 67212:67213 ChangeLog
И я вижу только те изменения, которые я внес, поэтому я знаю, что дополнительные изменения каким-то образом туда не попали.
Это заставляет меня беспокоиться о том, что merge на самом деле не просто забирает то, что я изменил, чего я и ожидал.Кто-нибудь может объяснить, что произошло?
Обновить:В ответ на NilObject:
Итак, у меня изменено 2 файла, актуален только список изменений, остальные объединены нормально.Когда я перехожу к своей обычной проверке магистрали, я выполняю приведенную выше команду 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.
После моего объединения предыдущих изменений разница в Списке изменений выглядит следующим образом:
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>
И он не смог найти строку "Кто-то еще" во время выполнения слияния, поэтому вставил этот фрагмент в контекст при вводе конфликта.Если бы это было неконфликтное слияние, были бы применены только те изменения, которые вы ожидали.
Другие советы
На самом деле здесь недостаточно информации, чтобы продолжать.
svn merge -r 67212:67213 https://my.svn.repository/trunk .
объединит все файлы, измененные в редакции 67212, в папке / trunk в репозитории и объединит их в ваш текущий рабочий каталог.Если вы это сделаете:
svn log -r 67212
Какие файлы он показывает измененными?Слияние извлечет изменения только из первого аргумента и применит их ко второму.Он не загружается обратно на сервер в первом аргументе.
Если это не отвечает на ваш вопрос, не могли бы вы опубликовать более подробную информацию о том, что именно происходит?