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版本到当前版本的历史更改记录。
耐心等待下载完成。

git库操作

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

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

更新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中输入可能会很麻烦,在vi中键入i进入输入模式即可较完整的粘贴注释内容。

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

最简单的是在master分支上开发。如果出现提交记录不能显示可能有以下几个原因:
1. 所提交记录在分支
如在dev分支上开发,用此保留提交记录

git rebase master
git checkout master
git merge dev

2.SVN提交记录时区与git不同
查看SVN提交记录生成的时间的格式,提交时使用

git commit --date "custom date string"

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

你可能感兴趣的:(git,git-svn)