GIT-SVN слияния 2 SVN филиалов

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

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

Спасибо

3 ответа

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

recursive

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

Но 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 НЕ рекомендуется в ветке, из которой вы планируете выполнить. Subversion не представляет слияния каким-либо разумным или полезным способом; таким образом, пользователи, использующие Subversion, не могут видеть сделанные вами слияния. Более того, если вы объединяете или извлекаете из ветки git, которая является зеркалом ветки SVN, dcommit может зафиксировать неправильную ветку.

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

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

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

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

  • создать новый репозиторий 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

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

Другие вопросы по тегам