迁移SVN 到Git Server

由于先前是用SVN做代码的版本管理,现在需要尝试将SVN转到Git来,由于Git自身附带了高质量的转换工具,剩下我们就需要做好迁移的配置。Git自带的桥接命令git svn 可以与svn交互,这样并不完美,不如一次性把它做好,特此记录下迁移的过程。

利用git svn clone 命令先克隆一个仓库出来


git svn clone https://localhost:8443/svn/eimaya/
--authors-file=user.txt --no-metadata --trunk=trunk eimaya

本地的SVN地址为https://localhost:8443/svn/eimaya/ 或者 http://Arthur-PC:8080/svn/eimaya

authors file 是建立SVN用户到Git作者的一个映射关系,创建user.txt文件,用如下格式表示映射关系:

svn = Matt <blog@xbc.me>

svn 是我建立的SVN的用户,你需要建立你自己的用户映射关系。

no metadata 参数是阻止git 导出svn包含的附加信息,这样提交到Git的记录就会显得很“干净”。

–trunk 导出trunk分支。

eimaya 是你的project名称。

在导入的过程中出现下面的错误


Initialized empty Git repository in e:/git/test/eimaya/.git/
error 0: REPORT request failed on '/svn/eimaya/!svn/vcc/default':
Path 'http://Arthur-PC:8080/svn/eimaya' is not canonicalized;
there is a problem with the client.
at D:\Git/libexec/git-core/git-svn line 5162

修改你的SVN 地址如下

git svn clone http://localhost:8080/svn/eimaya/ --authors-file=user.txt
--no-metadata --trunk=trunk eimaya

主要是git对https支持不好,更换为http即可。

输入命令导入svn仓库

git svn clone http://localhost:8080/svn/eimaya/ --authors-file=user.txt

--no-metadata --trunk=trunk eimaya

如果出现以下错误


Initialized empty Git repository in e:/git/test/eimaya/.git/
W: +empty_dir: branches
W: +empty_dir: tags
W: +empty_dir: trunk
Author: VisualSVN Server not defined in user.txt file

添加VisualSVN Server用户到user.txt 即可

VisualSVN Server = Matt <blog@xbc.me>

清理奇怪的标签,移到标签,将奇怪的远程分支变成实际的标签,把剩下的分支移到本地。

cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/tags

然后把refs/remotees下面剩下的索引变成本地分支:

cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes

添加远程git服务器地址

git remote add origin git@www.xbc.me:blog.git

推送全部的分支和标签

git push origin --all

参考资料

迁移到 Git

Git 与 Subversion

发表评论

电子邮件地址不会被公开。 必填项已用*标注