Как правильно использовать git-svn, svn-ers checkout svnrepo и git-ers clone gitrepo, совершая небрежно - PullRequest
2 голосов
/ 19 августа 2011

В моей компании мы используем SVN, но хотим плавно переключиться на GIT в будущем. Вот почему я начал изучать git-svn, который обещает служить интерфейсом для хранилища svn.

Я пытался использовать его со следующей настройкой:

  • SVNREPO - главный svn-репозиторий
  • GITREPO - гит-свн клон SVNREPO
  • REPO1, REPO2, ... - git-клоны GITREPO, представляющие git-ers

Требования:

  • [ManyGitUsers] многие гитары могут клонировать из / push в GITREPO
  • [ManySvnUsers] многие svners обязуются SVNREPO
  • [SyncHook] синхронизация между GITREPO и SVNREPO может быть сделана вручную или вручную администратором до того, как будет разработана ловушка
  • [NoInteraction] Гитеры не хотят ничего знать о SVNREPO и наоборот
  • [NoProactivity] пользователи решают все проблемы (конфликты), когда они случаются; они не синхронизируются с другими, чтобы избежать их

Вопросы:

  1. Возможна ли эта настройка с помощью git-svn? Посоветуйте другое, если есть лучшее
  2. Как мне настроить GITREPO?
  3. Нужно ли гитерам знать о специальном бэкэнде или все прозрачно?

Пока что мои эксперименты показали, что более работает, но фиксация в SVNREPO лишает возможности синхронизации с git. Я просто считаю, что причина в том, что я издаю плохие команды ...

Ответы [ 3 ]

4 голосов
/ 31 августа 2011

Существует альтернатива git-svn, которая подходит для ваших нужд: SubGit .Я работаю над проектом SubGit, но надеюсь, что этот ответ актуален и не будет рассматриваться как спам.

SubGit - это инструмент, который вы устанавливаете в свой репозиторий один раз на стороне сервера.Затем вы сможете клонировать этот репозиторий, используя «git clone» или извлечение в качестве рабочей копии Subversion.Пользователи Git будут работать так же, как они работают с обычным Git-репозиторием, никаких специальных команд не требуется.То же самое верно для пользователей Subversion.

Стороны Git и Subversion автоматически синхронизируются SubGit .

1 голос
/ 20 августа 2011

Я не думаю, что это может в долгосрочной перспективе и приведет к проблемам.

Сначала позвольте мне рассказать о том, как выполняется зеркалирование SVN:

Обычно есть мастер-репозиторий и подчиненный репозиторий (обычно в разных местах, отсюда и необходимость). Свнерс, при проверке местоположения мастера и фиксации от мастера. Те, которые находятся в ведомом местоположении, проверяют и фиксируют в подчиненном Но фактическая настройка заключается в том, что всякий раз, когда кто-то фиксирует в зеркале, коммит в подчиненном сначала фиксируется в ведущем, а затем отражается обратно в подчиненный (svnsync). Конечный пользователь не знает об этом. Это гарантирует, что репозитории синхронизированы. Более подробное описание этой настройки: http://www.tty1.net/blog/2007-08-26-subversion-proxy_en.html

Теперь внесите Git, это становится трудным. Дело в том, что в бот-репозитории Git и SVN-репозитории могут быть почти одновременные коммиты. Если будет применен коммит в SVN и новый коммит поступит от Git (который не видел новый коммит в SVN), у вас будет много проблем.

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

Или есть центральный репозиторий git, как вы упомянули (клон с git-svn), и все гитеры клонируются из него и проталкиваются к нему. К центральному репо подключается git svn rebase и git svn dcommit, но когда что-то ломается, кто-то исправляет репо вручную.

0 голосов
/ 19 августа 2011

Работает.Поиск / чтение документации.Также есть тонны книг, посвященных этой теме.

Обычно пользователи GIT несут всю ответственность, и все на стороне SVN остается неизменным.

При каждом коммите SVN коммиты пользователи GIT должны git svn rebase.На каждом коммите GIT пользователи GIT должны делать git svn dcommit.

...