git svn使用小记


之前,个人写过使用git管理svn的文章,距离当时差不多有两个月了,说说自己在这两个月内学到的一些小东西。

svn认证哪里去了?

使用git管理svn的时候,个人一个明显的感受是svn那“烦人”的认证信息没了。当初git clone到现在只有一次认证提示,我很好奇git是怎么做的。
后来有一次认证信息改变了,git svn dcommit时那个熟悉的svn认证输入提示又出现了,这时我恍然大悟,git其实是采用svn的认证存储机制。虽然是用git管理svn,但是并没有用git特色的ssh key方式。之前git clone没有出现认证提示的原因也是因为git使用了svn的认证(我以前输入并保存过)。

新分支在哪里?

第一次在项目中使用git管理svn之后,我在开发第二个项目的时候出现了问题,git checkout提示没有那条远程分支。后来google了下,了解到需要执行git svn fetch把分支信息拷贝下来。换句话说,svn的新分支需要通过git svn fetch才能出现。

merge和cherry-pick

使用git管理svn一段时间后,我有了一个想法:既然我们苦逼的开发人员没有建立svn新分支的权限,何不用git在本地建立一条新分支,在正式的分支建立之后merge上去?想法很好,但实际中出现了多处奇怪的树冲突,而且是新增删除文件的那种,实际没有任何修改。具体原因我没有深究(苦逼的开发人员不知道上面的人在svn上做了什么手脚),但是我学到了另外一个命令cherry-pick。与其merge一条实验分支,还不如把实验分支上的部分提交合并到正式分支上,减少麻烦。

git show

这是个好东西,配合git blame,git checkout等在追踪某行代码是谁引入时很有用。典型步骤是git blame查看提交;git show查看提交人、提交内容;如果看到的是某个分支的merge的话,使用git checkout切换到那条分支继续trace。

git diff –stat

git diff –stat用于查看改动的文件,接下来可以用git difftool 查看文件的改动。在改动文件非常多的时候很有用。个人估计还有更好的方法(写脚本?),但是暂时先这样吧。