在GIT服务器仓库的特定文件夹中添加本地存储库

时间:2016-04-14 12:06:28

标签: git svn subgit

我正在使用SubGit将代码从SVN迁移到GIT。 我的一些SVN存储库构建为:

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-Repo中我不知道&#39;有一个名为Project1的文件夹,就像我和SVN一样。 经过调查后,我找不到允许我创建这个Proejct1文件夹GIT仓库的命令。

你可以帮我吗?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

有3个选项

选项1。您已经做过的事情(最合理的选择)。 将SVN中的两个项目转换为两个单独的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个选项中的一个,但第一个是最好的选项。

答案 1 :(得分:0)

对于SVN到git的一次性转换,我建议使用svn2git。这个名字有很多工具。可能最好的是https://github.com/svn-all-fast-export/svn2git的KDE。要预先分析SVN repo历史记录以构建适用于svn2git的规则,您可以从此处使用svneverever:http://blog.hartwork.org/?p=763

我已经将这几个SVN回购转换为Git并且做得非常好。

您可以使用prefix规则获取所需的子目录。