Преобразование нестандартного хранилища Subversion в git - PullRequest
3 голосов
/ 12 февраля 2009

У меня есть хранилище, макет которого такой:

    trunk/
        projectA
        projectB
    branches/
        projectA-1.0
        projectB-1.0
    tags/
        projectA-1.0.1
        projectB-1.0.1

Я хочу преобразовать их в отдельные репозитории git, используя trunk / projectA в качестве каталога верхнего уровня и все его ветви как ветви git.

Всякий раз, когда я пытаюсь указать git svn init, как git svn init -T trunk/projectA -b branches -t tags http://svn.example.com, продолжение git svn fetch таинственно завершается неудачей при разных ревизиях. Иногда доходит до 200, иногда останавливается.

В настоящее время я думаю, что мне следует создать git-репозиторий, который будет отображать весь репозиторий subversion как единый объект с подкаталогами для каждого проекта. Тогда я бы использовал git-filter-branch для перезаписи подкаталогов в корень проекта.

Однако я не уверен, как заставить ветви работать так, как я хочу, используя git-filter-branch и.

Также было бы идеально создать одно репозиторий git с различными ветками для «ствола» каждого проекта, у меня не было бы проблем, если бы в этом случае не было мастера.

Ответы [ 2 ]

5 голосов
/ 12 февраля 2009

Рассматривали ли вы svn2git , чтобы импортировать svn в репозиторий git?

Это лучше, чем git svn clone, потому что если у вас есть этот код в SVN:

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svn будет проходить историю коммитов для создания нового репозитория git.
Он будет импортировать все ветви и теги как удаленные ветви svn, тогда как вам действительно нужны локальные ветки git и объекты тегов git .
Поэтому после импорта этого проекта вы получите:

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

После того, как svn2git завершит работу с вашим проектом, вы получите вместо этого:

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

Наконец, он удостоверяется, что заголовок мастера совпадает с текущей магистралью репозитория SVN.

Так что в вашем случае это даст вам действительные ветки git для применения git-filter-branch.

0 голосов
/ 28 апреля 2010

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

...