如何使用git svn将SVN trunk下各目录转为独立GIT仓库
SVN子目录拆分迁移为独立Git仓库方案
核心思路
针对trunk下的每个子目录单独执行git svn克隆操作,手动指定对应子目录为拉取主干,同时禁用SVN分支、标签的拉取,最后重命名分支为符合要求的main分支即可。
前置准备
提前准备好SVN作者与Git作者的映射文件authors.txt,每行格式如下:SVN用户名 = Git用户名 <Git邮箱地址>
单个子目录迁移步骤(以apps目录为例)
- 执行git svn克隆命令,仅拉取trunk/apps目录的内容,忽略所有分支和标签:
git svn clone --trunk=trunk/apps --no-tags --no-branches --authors-file=authors.txt https://mysvnrepo.com.br/svn/myapp/ c:/mygitrepo/apps
参数说明:
--trunk=trunk/apps:指定SVN仓库中trunk/apps路径作为Git仓库的唯一拉取源,克隆后只会保留该路径下的文件和对应的提交历史--no-tags --no-branches:完全跳过SVN的tags、branches目录拉取,符合不需要其他分支和标签的需求
- 进入克隆后的本地Git仓库目录,将默认生成的trunk分支重命名为main:
cd c:/mygitrepo/apps git branch -m trunk main
其余目录迁移
对site、services、scripts三个目录重复上述操作即可,仅需要替换克隆命令中--trunk参数后的路径和本地目标目录名,比如site目录的克隆命令为:
git svn clone --trunk=trunk/site --no-tags --no-branches --authors-file=authors.txt https://mysvnrepo.com.br/svn/myapp/ c:/mygitrepo/site
可选优化
如果SVN仓库提交历史过多,拉取速度慢,可以在克隆命令中加入-r <起始版本号>:HEAD参数,按需拉取指定版本范围的提交历史,比如从SVN版本号1200开始拉取的示例:
git svn clone -r 1200:HEAD --trunk=trunk/apps --no-tags --no-branches --authors-file=authors.txt https://mysvnrepo.com.br/svn/myapp/ c:/mygitrepo/apps
内容的提问来源于stack exchange,提问作者Marcelo The Mage Coder
相关产品推荐
相关产品推荐

