在Windows中使用git svn克隆从SVN迁移到Git

时间:2018-12-14 15:27:54

标签: git svn clone

我正在尝试使用git svn clone将代码从SVN存储库迁移到Git。我想为每个模块而不是整个项目创建一个git存储库。我们有一个稍微不标准的项目结构,我们有主干,发布分支和分支文件夹。我不确定在Git中拥有发布分支会是一个好地方。当前的存储库结构,我使用的命令和结果如下。 我也想在Git中保持相同的结构。

我已经在这里待了一个多星期了,距离还没有太远。任何帮助将不胜感激。谢谢!

https://mydomain/svn/Project/Module/trunk
                                   /release
                                   /branches/branch1
                                   /branches/branch2
                                   /branches/branch3
                                   /branches/closed/closed1
                                   /branches/closed/closed2 
                                   .........

The Module has multiple components.

Module/WebModule
      /WebEar
      /DataModule
      /...

git svn clone https://mydomain/svn/Project/Module Module_Git -T trunk -b branches -b release --no-minimize-url --prefix=svn/ --authors-file=users.txt

git branch -a is displaying the following:

remotes/svn/WebModule
remotes/svn/WebModule@1011
remotes/svn/WebModule@3578
remotes/svn/WebEar
remotes/svn/WebEar@1011
remotes/svn/WebEar@3578
remotes/svn/DataModule
remotes/svn/DataModule@1011
remotes/svn/DataModule@3578
remotes/svn/closed
remotes/svn/branch1
remotes/svn/branch1@1011
remotes/svn/branch2
remotes/svn/branch3
remotes/svn/closed1
remotes/svn/closed2

I am using Git Bash in Windows 7
Git version: 2.19.1
Subversion: 1.9.4

我尝试了svn2git,但是在git checkout -f master上失败了,没有建议的解决方案对我有用。

2 个答案:

答案 0 :(得分:0)

选项-b release提供目录,其中git svn fetch在其中查找分支子目录。在您的情况下,git svn/release/目录的所有子目录作为分支。显然这是错误的,但是没有简单的解决方法。

要获取release目录作为分支,您需要将其移动到子目录。像

svn mkdir release-dir
svn mv release release-dir
git svn clone https://mydomain/svn/Project\/Module Module_Git -T trunk -b branches -b release-dir --no-minimize-url --prefix=svn/ --authors-file=users.txt

如果您暂时无法移动发行分支,而我的建议是克隆两次,则第一次使用-T trunk,第二次使用-T release(是的,请处理release分支为树干),并合并结果:

git svn clone https://mydomain/svn/Project\/Module Module_Git -T trunk -b branches --no-minimize-url --prefix=svn/ --authors-file=users.txt clone1
git svn clone https://mydomain/svn/Project\/Module Module_Git -T release --no-minimize-url --prefix=svn/ --authors-file=users.txt clone2
cd clone1
git fetch ../clone2 master:release

答案 1 :(得分:0)

我做了以下事情。

git svn init https://mydomain/svn/Project/Module Module_Git -T trunk -b branches --no-minimize-url 

updated .git/config and added the following:

branches = {release}:refs/remotes/*

git svn fetch