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

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

6 голосов
/ 22 апреля 2010

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

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

Спасибо

Ответы [ 3 ]

7 голосов
/ 22 апреля 2010

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

recursive

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

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

CAVEATS

Для простоты и взаимодействия с менее способной системой (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 попытаетсяcommit поверх SVN commit, названного в

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

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

1 голос
/ 27 апреля 2010

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

  • создать новый репозиторий 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
0 голосов
/ 19 июля 2013

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

...