Git -svn слияние 2 svn ветвей

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

  • Возможно ли использовать git -svn для выполнения слияния ветвей?
  • Будет ли git -svn обрабатывать переименованные файлы?

Спасибо

Ответ 1

git merge должен иметь возможность обнаруживать (до определенной точки) переименования.

recursive

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

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

ПРЕДОСТЕРЕЖЕНИЯ

Для простоты и взаимодействия с менее способной системой (SVN) рекомендуется, чтобы все git svn пользователи клонировали, извлекали и dcommit непосредственно с сервера SVN и избегали всех git clone/pull/операции слияния/выталкивания между хранилищами и ветвями git.
Рекомендуемым методом обмена кодом между ветвями и пользователями git является git format-patch и git am, или просто 'dcommit'ing в 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 to, является первым родителем слияния. В противном случае хаос произойдет, особенно если первый родитель является старшим фиксатором в той же ветки SVN.

Ответ 2

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

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

Ответ 3

Использовать функции слияния SVN для объединения ветвей SVN, это будет быстрее. Использование Git для этих проблем довольно сложно, оно создает слишком много конфликтов...