Подтвердить что ты не робот

Предотвращение конфликтов при использовании git -svn

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

  • Существует общий репозиторий svn

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

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

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

Кто-нибудь, имеющий такую ​​же проблему?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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