????虽然使用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进入输入模式即可较完整的粘贴注释内容。