Преобразование нестандартного репозитория Subversion в git

У меня есть репозиторий с такой компоновкой:

    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 с разными ветвями для «ствола» каждого проекта, у меня не было бы проблем, если бы в этом случае не было мастера.


person Otto    schedule 12.02.2009    source источник


Ответы (2)


Вы рассматривали 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-native и объекты тегов 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

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

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

person VonC    schedule 12.02.2009
comment
Нет, это в новинку для меня. Я займусь расследованием. Спасибо! - person Otto; 12.02.2009
comment
На самом деле это не сработало. Он не учитывал коммитов на целый год. - person Otto; 14.02.2009
comment
Как оказалось, это могло быть что-то не так с моей машиной. git svn clone у меня тоже начал давать сбои. В конце концов, мы смогли клонировать эту вещь, хотя немного иначе обработали историю. - person Otto; 21.12.2009
comment
VonC, похоже, нет файлов для загрузки для svn2git по указанному вами URL? - person Peter Boughton; 04.11.2010
comment
@Peter: svn2git теперь ссылается на stackoverflow.com/questions/572893/, где упоминаются более современные репозитории svn2git. - person VonC; 04.11.2010

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

person Otto    schedule 28.04.2010