git svn dcommit без перебазирования - PullRequest
6 голосов
/ 10 января 2011

Наша компания использует (и поддерживает!) SVN, но я склонен использовать git. Что я хочу попробовать, так это иметь git-репозиторий - по одному на проект, разработчики проектов смогут извлекать из этого репозитория (и, конечно, извлекать друг друга, если захотят). Но я все еще хочу перенести все изменения в SVN, потому что SVN поддерживается нашей службой технической поддержки.

Я тестировал сценарий со следующими репозиториями:

  1. SVN-репозиторий - он поддерживается нашей компанией, и наша команда должна в любой момент отправить туда все изменения
  2. git-svn-clone - это git-репозиторий, клонированный из SVN выше - все разработчики проекта должны размещать здесь свои коммиты
  3. git-dev-clone - это git-репозиторий разработчика.

Единственная проблема с прямым использованием git svn rebase и git svn dcommit, которую я заметил, заключается в том, что после каждого перехода из репозитория git разработчика в репозиторий git-svn-clone мне приходится перебазировать репозиторий разработчика как как только изменения будут распространены в SVN и перебазированы. Чего я хочу добиться, так это избегать перебазирования после каждого толчка.

Обратите внимание, что я предполагаю, что каждый разработчик проекта будет использовать только репозиторий git, и никто не будет использовать SVN напрямую.

Мне удалось достичь этого поведения вручную, проверяя каждый коммит git по одному в репозитории 'git-svn-clone' после push и фиксируя эти изменения в SVN с помощью клиента SVN. Я полагаю, что 'git svn dcommit' делает то же самое, но он также синхронизируется с SVN и вносит изменения в идентификаторы SHA, что заставляет меня перебазировать.

Опция

P.S .: --no-rebase для git svn dcommit не помогла, поскольку после первого коммита, переданного в SVN, git svn dcommit не позволяла мне вносить больше изменений в SVN, пока предыдущий не был перебазирован. Я пробовал такое поведение один раз и, вероятно, мог что-то упустить.

1 Ответ

7 голосов
/ 11 января 2011

Это даже хуже, чем ... dcommit изменяет коммиты, загруженные в SVN (добавление строк git-svn-id, изменение информации об авторстве и т. Д.), Даже если вы взломали dcommit, чтобы не пытаться перебазировать.

По сути, git-svn не может синхронизироваться обратно из SVN без выполнения ребазинга. Работает новый интерфейс SVN git <->, который может устранить это ограничение, но он еще не готов.

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

...