老旧SVN仓库按远程目录创建独立Git仓库的方法咨询
把SVN的Project1迁移为独立Git仓库的详细步骤
我帮很多人做过类似的SVN转Git迁移,针对你这个目录结构,咱们一步步来,保证把每个环节讲清楚:
1. 准备本地环境
首先得确保你的电脑上装了Git,而且要包含git-svn工具——Windows/macOS的Git安装包默认就带这个,Linux的话可能需要单独装(比如Ubuntu上用sudo apt install git-svn)。
2. 克隆SVN仓库到本地Git
你的SVN结构是Project1下直接有大写的Branches和Tags目录,不是默认的小写trunk/branches/tags布局,所以克隆的时候要指定分支和标签的路径:
git svn clone https://remote-svn/svn/project/Project1 --branches=Branches --tags=Tags --no-metadata my-git-project1
--branches=Branches:告诉git-svn分支存在Branches目录下--tags=Tags:指定标签所在的目录--no-metadata:去掉SVN相关的元数据,让Git仓库更干净my-git-project1:本地Git仓库的名称,你可以改成自己喜欢的
克隆完成后进入仓库目录:
cd my-git-project1
3. 把SVN分支/标签转换成Git原生分支/标签
git-svn会把SVN的分支和标签当成Git的远程跟踪分支,咱们需要把它们转成Git原生的分支和标签:
处理标签
运行下面的命令,把所有SVN标签转换成Git标签,然后删除对应的远程跟踪分支:
for tag in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags/); do git tag "${tag##tags/}" "$tag" git branch -D -r "$tag" done
处理分支
同样,把SVN的分支转成Git本地分支:
for branch in $(git for-each-ref --format='%(refname:short)' refs/remotes/Branches/); do git branch "$branch" "refs/remotes/Branches/$branch" git branch -D -r "Branches/$branch" done
4. 生成.gitignore(可选但推荐)
如果SVN里有设置忽略规则,可以导出成Git的.gitignore文件:
git svn show-ignore > .gitignore git add .gitignore git commit -m "Add .gitignore from SVN ignore rules"
5. 推送到远程Git仓库
现在本地Git仓库已经准备好了,接下来推送到你的远程Git服务器(比如自建Git服务、GitLab、GitHub等):
- 先在远程创建一个空的Git仓库(不要初始化README或.gitignore)
- 添加远程仓库地址:
git remote add origin <你的远程Git仓库URL> - 推送所有分支和标签:
git push origin --all git push origin --tags
一些实用小贴士
- 如果你的SVN仓库很大,克隆速度慢,可以用
--revision参数指定起始版本,比如只克隆从版本1000到最新的提交:git svn clone ... --revision 1000:HEAD - 迁移完成后,建议对比几个关键版本的代码、提交历史,确保和SVN一致
- 如果迁移过程中遇到权限问题,检查SVN的访问权限(比如是否需要用户名密码,克隆时会提示输入)
内容的提问来源于stack exchange,提问作者rXp
相关产品推荐
相关产品推荐

