我需要删除一个svn服务器,以便用tfs 2018服务器替换它 . 如果它会按照我的方式进行,我们只需要获取文件,但显然人们仍然希望能够查看历史记录和之前的签到 . 我们决定创建两个项目集合 . 一个只读的,您可以查看以前的签到,称为[Product] GitCollection和人们应该在其上工作的集合,称为[Product] Collection . 计划是从旧的svn存储库创建一个git存储库,并将其托管在只读[Product] GitCollection中 . 简短的信息 . svn repo的大小约为22GB .
这就是问题开始的地方 . 我有很多问题让svn存储库移动到一个新的git存储库 . 我正在遵循msdn指令 . https://docs.microsoft.com/en-us/vsts/articles/perform-migration-from-svn-to-git他们非常好,我能够解决作者文件的一些问题(错误的enconding等) . 但现在我处于执行git svn命令的状态,并且在"Initialized empty Git repository in C:/LowBudgetCopy/.git/"之后他被卡住了
没有消息 . 现在40分钟都没事 . 我非常怀疑他有一些问题,但我无法在新生成的git存储库中找到日志文件 . 我也认为它与命令--stdlayout有关 . 如果我没有通过标准布局命令,他至少可以复制文件(带有大量错误日志) . svn或git的标准或必需的文件夹布局我不是那么坚定 . 当前的svn包含多个项目,文件夹结构本身似乎不一致 .
目前,svn存储库包含4个主文件夹,结构如下:
-
/档案
-
/ Archive / ctb
-
/ Archive / ctb / branches
-
/ Archive / ctb / tags
-
/ Archive / ctb / trunk
-
......
-
......
-
...(存档文件夹非常一致 . 存档中的每个项目都具有相同的结构)
-
/固件
-
/固件/ CNC
-
/固件/ CNC /部署
-
/固件/ CNC / Doc
-
/固件/ CNC /来源
-
/固件/ CNC /来源/分支机构
-
/固件/ CNC /来源/标签
-
/固件/ CNC / Source / trunk
-
/固件/ CNC /工具
-
......
-
......
-
...(固件文件夹中的项目与存档中的项目具有不同的深度,但与固件中的所有其他项目一致 . )
-
/服务器
-
/ Server / Deployments
-
/ Server / Doc
-
/ Server / Source
-
/ Server / Source / Control
-
/ Server / Source / Control / branches
-
/ Server / Source / Control / trunk
-
/ Server / Source / Device
-
/ Server / Source / Device / branches
-
/ Server / Source / Device / trunk
-
......
-
......
-
......
-
/工具
-
/ Tools / Deployer /
-
(直接解决方案 . 没有主干,没有分支文件夹)
-
/ Tools / FtpTester
-
/ Tools / FtpTester / Source
-
/ Tools / FtpTester / Source / Trunc
-
......
-
......
-
...(在tools文件夹中它不一致 . )
任何人有提示或想法?
1 回答
对于一次性迁移,
git-svn
是 not 用于转换存储库或存储库部分的正确工具 . 如果你想使用Git作为现有SVN服务器的前端,它是一个很棒的工具,但对于一次性转换,你应该 not 使用git-svn
,但svn2git
更适合这个用例 .有很多工具称为
svn2git
,最好的工具是来自https://github.com/svn-all-fast-export/svn2git的KDE . 我强烈建议使用svn2git
工具 . 这是我所知道的最好的,它可以非常灵活地使用它的规则文件 .您将能够轻松配置
svn2git
的规则文件,以便从当前的SVN布局中生成您想要的结果,包括可能存在的任何复杂历史记录,包括从一个SVN仓库生成多个Git repos或将不同的SVN repos合并为一个如果你愿意,可以在一次运行中干净利落地回复 .如果您不是100%关于存储库的历史记录,http://blog.hartwork.org/?p=763来自http://blog.hartwork.org/?p=763是一个很好的工具,用于在将SVN存储库迁移到Git时调查它的历史记录 .
尽管
git-svn
或nirvdrumsvn2git
更容易入手,但除了灵活性之外,使用KDEsvn2git
而不是git-svn
的原因还有其他原因:历史由
svn2git
重建得更好更清洁(如果使用了正确的历史),对于具有分支和合并的更复杂历史尤其如此等等标签是真正的标签而不是Git中的分支
with
git-svn
标签包含一个额外的空提交,这也使它们不属于分支,因此正常的fetch
将不会得到它们,直到你给命令--tags
,因为默认情况下只提取指向读取分支的标签 . 适当的svn2git标签是它们所属的地方如果您在SVN中更改了布局,可以使用
svn2git
轻松配置它,使用git-svn
最终会丢失历史记录with
svn2git
您还可以拆分一个SVN存储库很容易进入多个Git存储库或将同一SVN根目录中的多个SVN存储库轻松组合到一个Git存储库中
使用正确
svn2git
比使用git-svn
快转换数倍你看,有很多原因导致
git-svn
更糟,而且KDEsvn2git
更优越 . :-)