2016-04-14 3 views
0

Я переношу код из SVN в GIT с помощью SubGit. Некоторые из моего SVN репозитория построены как:Добавить локальный репозиторий в конкретную папку сервера репликации GIT

SVN-Repo 
    + Project1 
     + trunk 
     + branches 
     + tags 
    + Project2 
     + trunk 
     + branches 
     + tags 

Использования SubGit:

subgit import --svn-url <svn_server>/SVN-Repo/Project1 C:\GitRepos\SVN-Repo\Project1.git --username xxx --password xxx. 

После того, что я клонировать в местном репо.

Тогда:

git clone <Git_server>/_git/GIT-Repo 
git push -u origin --all 

Результатом является то, что в GIT-Репо в конце я не»есть папка с именем Project1, как у меня с SVN. После расследования я не нашел команду, позволяющую мне создать эту папку Proejct1 GIT repo.

Не могли бы вы помочь мне?

Заранее спасибо.

+0

Какой результат вы хотите достичь (я не понимаю команды «git clone» + «git push»)? Команды, которые вы использовали, создали репозиторий Git на 'C: \ GitRepos \ SVN-Repo \ Project1.git' Не то, что вы хотите? Вам не нужно настраивать сервер Git для обслуживания Project1.git –

+0

Я хотел бы иметь такую ​​же структуру в GIT, что и в SVN. Значение внутри GIT-репо: 2 подпапки Project1 и Project2 с мастером ... Потому что, когда я нажимаю Project1, он расположен в корне репо, а не в папке с именем Project1 – Didier

+0

Вот как работает Git: репозиторий состоит из ветви, ветвь имеет дерево (папку), которое имеет свои собственные поддеревья и так далее. Филиал не может содержаться внутри поддерева. Но есть способ перевести весь ваш репозиторий с 2 ​​проектами в качестве каталога (не рекомендуется) или в репозиторий с ветвями 'refs/heads//*' или 'refs/heads/ - *' branchnames (это также doesn «Имеют смысл, если проекты не связаны). Итак, что вы сделали, это была самая разумная вещь. –

ответ

0

Для одноразовой конвертации SVN в git я бы рекомендовал использовать svn2git. Есть много инструментов с этим именем. Вероятно, лучшим является KDE один на https://github.com/svn-all-fast-export/svn2git. Чтобы проанализировать историю SVO-репо для создания правильных правил для svn2git, вы можете использовать svneverever отсюда: http://blog.hartwork.org/?p=763.

Я преобразовал пару SVN-репозиций в Git уже с этими и делает действительно отличную работу.

И вы можете использовать правило prefix там, чтобы получить подкаталог, который вы хотите.

1

Там вы 3 варианта

Вариант 1. Что вы уже сделали (наиболее разумный вариант). Преобразование обоих проектов в SVN в 2 отдельных хранилища Git. Затем установите доступ к репозиториям с помощью GitLab, Atlassian Bitbucket Server или любого другого программного обеспечения Git-сервера.

Вариант 2. Рассматривайте весь репозиторий SVN как единый каталог.

subgit configure --svn-url <svn_server>/SVN-Repo --layout directory C:\GitRepos\SVN-Repo\repo.git 

subgit install C:\GitRepos\SVN-Repo\repo.git 

Затем вы можете запустить

subgit uninstall C:\GitRepos\SVN-Repo\repo.git 

если вы не нуждаются в постоянной синхронизации. В этом случае репозиторий Git будет внедрен в SVN-Repo.

Вариант 3. Один репозиторий Git с филиалами обоих проектов.

subgit configure --svn-url <svn_server>/SVN-Repo C:\GitRepos\SVN-Repo\repo.git 

Затем редактировать repo.git/subgit/config установить

trunk = Project1/trunk:refs/heads/project1-master 
branches = Project2/trunk:refs/heads/project2-master 
branches = Project1/branches/*:refs/heads/project1-* 
branches = Project2/branches/*:refs/heads/project2-* 
shelves = shelves/*:refs/shelves/* 
tags = Project1/tags/*:refs/tags/project1-* 
tags = Project2/tags/*:refs/tags/project2-* 

Затем запустите

subgit install C:\GitRepos\SVN-Repo\repo.git 

Затем вы можете запустить

subgit uninstall C:\GitRepos\SVN-Repo\repo.git 

если вы не нуждаются в постоянной синхронизации.

В этом случае у вас есть 1 репозиторий Git с ветками, начиная с project1- и project2-, соответствующих вашему проекту. Вместо project1-/project2- вы также можете использовать project1//project2/.

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

+0

Спасибо за подробный ответ. Я сохраняю вариант 1. – Didier