Как избежать конфликтов при использовании git-svn - PullRequest
10 голосов
/ 21 февраля 2009

Люди сталкиваются с повторяющимися конфликтами кода при извлечении из общего репозитория git в следующем сценарии:

  1. Существует общий репозиторий SVN

  2. Есть несколько разработчиков, которые отслеживают / синхронизируют это распространенное svn-репо со своими локальными git-репозиториями, используя git-svn bridge (через git svn rebase / dcommit)

  3. Время от времени этим разработчикам, использующим git, нужно делиться своими изменениями, не затрагивая репозиторий svn. Для этого они устанавливают общий репозиторий git и обмениваются своей работой, используя команды pull / push

  4. Оказывается, эти разработчики могут столкнуться с конфликтными проблемами из-за использования «git svn rebase» для синхронизации с основным репозиторием SVN. Это происходит потому, что операция rebase переписывает историю локальной ветки git, и становится невозможным протолкнуть ее в общий репозиторий git, а извлечение из него часто приводит к конфликтам.

У кого-нибудь есть такая же проблема?

Ответы [ 2 ]

8 голосов
/ 21 февраля 2009

git-svn (1) говорит:

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

Если ваша ситуация позволяет это сделать, вы можете использовать ветки (то есть подкаталоги) в хранилище SVN, чтобы изолировать вашу работу от других разработчиков.

3 голосов
/ 13 июня 2009

Что я обнаружил, так это то, что слияние git-svn меняется на разные ветви git, и между ними все в порядке. Точка, в которой начинаются проблемы git-svn, - это объединение этих изменений обратно в svn (или, точнее, в ветку git, из которой вы dcommit). Мне кажется, что большинство из этих проблем можно предотвратить, если вы вернете свои изменения обратно в svn вручную (например, git diff | patch). Это лишит историю того, что вы объединяете, но пользователи Subversion привыкли к этому, и это не имеет большого значения.

...