使用 git svn clone 在 windows 中将 SVN 迁移到 Git

SVN to Git migration in windows using git svn clone

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

我已经在这里工作了一个多星期了,并没有走得太远。任何帮助将不胜感激。谢谢!

https:///mydomain/svn/Project/Module/trunk
                                   /发布
                                   /branches/branch1
                                   /branches/branch2
                                   /branches/branch3
                                   /branches/closed/closed1
                                   /branches/closed/closed2
                                   …………

该模块有多个组件。

Module/WebModule
      /网耳
      /数据模块
      /...

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

git branch -a 显示以下内容:

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

我在 Windows 7 中使用 Git Bash
Git版本:2.19.1
颠覆:1.9.4

我试过 svn2git 但它在 git checkout -f master 时失败了,none 建议的解决方案对我有用。

选项-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

我做了以下事情。

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