Git是一款分布式版本管理工具,由linux的缔造者Linus Torvalds设计并实现,具体关于Git的介绍和使用方法可参见其官方站。
这里要说的是Git是如何做到既可以管理好本地代码又可以与已有的SVN中心库进行同步的。
1、安装
git-svn默认包含在Git的安装包中,不过在Ubuntu中,git-svn是作为一个独立的Package需要额外安装的
sudo apt-get install git-svn
环境变量配置:
将/usr/lib/git-core配置到你的PATH环境变量中
2、检出
git-svn clone命令完成这个操作
git-svn clone http://192.168.18.80/Mar/trunk
检出分步操作:功能与上面步骤相同
建立本地目录, 比如假定是myproj
$mkdir myproj
$cd myproj
初始化并获取某个版本
$git svn init http://192.168.18.80/Mar/trunk
$git svn fetch -r xxxxx
获取某个版本,假如不指定版本,它就会根据svn记录一级一级获取
3、更新
git-svn rebase 注意这里用的是rebase,而不是update。
4、查看日志
git-svn log
加上-v选项,还可以提供每次commit操作涉及的相关文件的详细信息。
5、提交
将本地代码同步到Svn服务器。如果要同步到git服务器,用git命令
git-svn dcommit
这个命令会将你在本地使用git commit提交到本地代码库的所有更改逐一提交到svn库中。
加上-n选项,则该命令不会真正执行commit到svn的操作,而是会显示会有哪些本地变动将被commit到svn服务器。
git-svn dcommit似乎不能单独提交某个本地版本的修改,而是一次批量提交所有与svn中心版本库的差异。
6、解决冲突
例如冲突文件为foo.c
使用git-svn rebase获取svn服务器上的最新文件,导致冲突,
不过此时svn版本信息已经添加到本地git库中(通过git log可以查看)
打开foo.c,修改代码,解决冲突;
执行git rebase --continue,git提示我:
You must edit all merge conflicts and then
mark them as resolved using git add
执行git add foo.c,告知git已完成冲突解决;
再次执行git rebase --continue,提示"Applying: git v1",此时"git v1"版本又一次成功加入本地版本库,你可通过git log查看;
执行git-svn dcommit将foo.c的改动同步到svn中心库,到此算是完成一次冲突解决。
git比较智能,会提示你解决问题的方法,所以遇到问题时注意看提示文档。
7、设置忽略文件
要忽略某些文件, 需要首先执行如下命令:
git config --global core.excludesfile ~/.gitignore
然后编辑 vi ~/.gitignore.
例如: 需要忽略vim的临时文件,就写:
.*.swp