git 迁移至 svn

git-svn

新版本git中已经集成git svn工具,可以用于git和svn之间的转换,在git bash中可以通过 git svn –help 查看相关命令的说明。

git迁移至svn

具体操作
  1. 在svn中建立相关目录
  2. 在git环境里初始化svn

    $ git svn init svn://ip:port/xxx

  3. 获取svn上的更新

    $ git svn fetch

    会得到svn的分支名

    r4178 = 1242a1de3082443e16594af0ea276024e49332b4 (refs/remotes/git-svn)

  4. 提交Git项目到svn

    $ git svn dcommit

==注意:这个时候git会提示==

Unable to determine upstream SVN information from HEAD history.
Perhaps the repository is empty. at /usr/local/git/libexec/git-core/git-svn line XXX.


原因分析

  因为现在Git 项目的commits不知道要放到SVN 项目的哪个版本之后,即Git 项目的这些提交要放在SVN哪个版本之后。

This fails since the git svn command can’t figure out which commits to push: there’s no link between our original Git repository and the Subversion heads.
To fix this, we can use a Git graft to link them. We’ll tell Git the commit which created the SVN folder in which we want to store the project is the parent commit of the first commit in our Git repository.


解决方案:
  1. 显示svn提交分支的版本号

    $ git show-ref git-svn

    1242a1de3082443e16594af0ea276024e49332b4 refs/remotes/git-svn

  2. 显示git提交的版本号

    $ git log –pretty=oneline master | tail -n 1

    b08ed4406c1feaffb7baf4057d18401e40882fbe 第一次提交

  3. 将版本信息输出到.git/info/grafts文件,目的是告知svn 将b08ed4 版本放置在1242a1版本后

    $ echo “b08ed4406c1feaffb7baf4057d18401e40882fbe 1242a1de3082443e16594af0ea276024e49332b4” >> .git/info/grafts

  4. 提交git代码至svn

    $ git svn dcommit

SVN迁移到Git

  1. 克隆SVN仓库。

    $ git svn clone -s URL/project project

  2. 将SVN仓库的更新同步到Git

    $ git svn rebase

  3. 创建git忽略文件 .gitignore

    $ git svn create-ignore

提交svn冲突解决

  如果你正在提交的文件在svn服务器上已经被别人改过,就会发生提交冲突。通常解决方法如下:
1. 首先使用git-svn rebase获取svn服务器上的最新冲突文件,比如:README.md,这将导致与本地README.md冲突,不过此时svn版本信息已经添加到本地git库中(通过git log可以查看),git-svn rebase提示你在解决README.md的冲突后,运行git rebase –continue完成rebase操作
2. 打开 README.md,修改文件,解决冲突
执行git rebase –continue,git提示:You must edit all merge conflicts and then mark them as resolved using git add
3. 执行git add README.md,告知git已完成冲突解决
4. 再次执行git rebase –continue,提示”Applying: git xxx”,此时”git xxx”版本又一次成功加入本地版本库,可通过git log查看;
5. 执行git-svn dcommit将 README.md 的改动同步到svn中心库,到此算是完成一次冲突解决。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值