git svn简明使用教程

虽然使用git的好处多多,不过由于一些历史原因我们在工作时可能还得使用SVN,那么有没有一种方法可以兼顾理想与现实呢?
git给我们提供了git svn命令工具,可以用使用git的方法来管理SVN代码。闲话不多说,正式开始我们的git svn使用教程。

创建仓库

  1. 只拉取单一目录:
    git svn clone http://xx.xx.xx.xx/trunks/demo
  2. 拉取服务器上全部数据:
    git svn clone http://xx.xx.xx.xx/demo -T your_trunk -b your_branches -t your_tags
    如果SVN服务器上的目录结构为标准目录即trunk、tags、branches,可直接用
    git svn clone -s http://xx.xx.xx.xx/demo
    如果历史记录太多不需要全部读取下来可以加参数 -r1000:HEAD,只会拉取从1000版本到当前版本的历史更改记录。
    耐心等待下载完成。

如果SVN库中有镜像目录,git svn无法自动读取下载导致git库内容不全时,可参考 git库中引用文件夹/文件

git库操作

下载完成后就可以使用正式使用git命令,复习下常用git命令:

git status                       查看仓库状态
git log                          查看提交记录
git reflog                       查看git操作记录
git add -A                       添加需要提交的文件
git commit -m "我是注释"          提交已add的文件到仓库
git reset --hard HEAD            恢复所有修改的文件到最新版本

当然我们常常还需要处理代码冲突,git命令或Mac上的工具还是弱了些,这时就肯定要用到神器Beyond Compare,推荐使用Beyond Compare 4,实测Beyond Compare 3在处理git svn库代码有时不能正确合并。记得配置Beyond Compare为默认difftool/mergetool,配置说明参见:
http://www.scootersoftware.com/support.php?zz=kb_vcs

更新SVN代码

git svn rebase

提交git库中文件到SVN版本库

本地开发完后git commit到本地git库,之后可用如下命令提交文件到SVN:
git svn dcommit

其它技巧

使用git svn做SVN库中转站

由于网络等原因,一些计算机可能无法管理SVN库中代码,给我们的开发造成很大的不便。这时可以利用git库可进行离线版本管理的特点在本地建立git svn版本库,以此版本库做中转来解决版本管理问题。下面为一示例:
建立本地git仓库,D盘下建立目录名为deploy 的git仓库:

cd d:/
git svn clone svn://x.x.x.x/test deploy

建立开发仓库:

git clone d:/deploy dev_master

因为用git svn克隆的仓库不能使用bare设置为没有工作区的镜像库,所以在dev_master push时可能会有receive.denyCurrentBranch’ Configuration variable to refuse这样的提示,这是因为git默认不允许push到non-bare的库,可在deploy 目录下使用如下配置:

git config receive.denyCurrentBranch updateInstead

提交固定格式的注释

一些提交的注释可能需要固定的格式,在vi中键入i进入输入模式可较完整的粘贴注释内容,或搜索使用git commit 模板用法。

git提交记录不能在SVN历史记录上显示

最简单的是在master分支上开发。如果出现提交记录不能显示可能有以下几个原因:

  1. 所提交记录在分支
    如在dev分支上开发,用此保留提交记录
git rebase master
git checkout master
git merge dev
  1. SVN提交记录时区与git不同
    查看SVN提交记录生成的时间的格式,提交时使用
git commit --date "custom date string"

如果已经提交,用amend命令:

git commit --amend --date "Mon May 30 12:00:30 2016 +0800" -c c3926b
//date中按正确的日期格式书写,c参数为commit-id,不是svn-id

用此方法提交在git库中时间为"custom date string",但是由SVN客户端查看为真实提交到SVN服务器端的时间。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值