слияние мерзавца-svn 2 ответвления svn

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

  1. Это - возможный мерзавец-svn использования для выполнения слияния ответвлений?
  2. Мерзавец-svn обработает переименованные файлы также?

Спасибо

6
задан dimba 27 April 2010 в 18:28
поделиться

2 ответа

git merge должен уметь обнаруживать (до определенного момента) переименования.

рекурсивный

Это может разрешить только две головы с использованием 3-стороннего алгоритма слияния.
Кроме того, это может обнаруживать и обрабатывать слияния с переименованием.
Это стратегия слияния по умолчанию при извлечении или слиянии одной ветви.

Но git-svn может только импортировать / экспортировать из / в SVN, но не выполняет слияние.
И объединить сложно:

ПРОСТРАНСТВА

Ради простоты и взаимодействия с менее функциональной системой (SVN) рекомендуется, чтобы все git svn пользователи клонируют, выбирают и dcommit прямо с сервера SVN и избегают всех операций git clone / pull / merge / push между репозиториями и ветвями git.
Рекомендуемый метод обмена кодом между ветвями git и пользователями - это git format-patch и git am или просто "dcommit" в репозиторий SVN.

НЕ рекомендуется запускать git merge или git pull на ветке, из которой вы планируете выполнить dcommit. Subversion не представляет собой слияние в разумной или полезной форме; поэтому пользователи, использующие Subversion, не могут видеть никаких сделанных вами слияний. Более того, если вы выполните слияние или извлечение из ветки git, которая является зеркалом ветки SVN, dcommit может выполнить фиксацию в неправильную ветку.

Если вы выполняете слияние, обратите внимание на следующее правило: git svn dcommit попытается выполнить фиксацию поверх фиксации SVN, указанной в

git log --grep=^git-svn-id: --first-parent -1

. Поэтому вы должны убедиться, что самая последняя фиксация ветви, в которую вы хотите выполнить dcommit, является первый родитель слияния. В противном случае произойдет хаос, особенно если первый родительский коммит является более старым коммитом в той же ветке SVN.

7
ответ дан 16 December 2019 в 21:36
поделиться

Однажды у меня была такая же проблема на проекте в колледже. я сделал следующее:

  • создал новый репозиторий git-svn ( git svn clone -s https: //… )
  • слил ветки с git ( git checkout master ; git merge branch )
  • проверить ствол с помощью svn ( svn co https: //… / trunk )
  • скопировать объединенные файлы из git
  • удалить оставшиеся файлы и каталоги с svn ( svn rm )
  • коммит с svn ( svn ci )
  • получить новый коммит в git
1
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: