从svn迁移到git
最近需要从svn迁移到git了,之前虽然有简单的用过的git,但那远远不够,最近先花了点时间来看看git的使用。
git和svn的最大区别是git是分布式的,而svn仅仅是一个svn服务器,实际的来说,git有本地的代码库,可以离线提交自己的修改至本地的代码库。通过下面这个图可以有一个直观的印象。
若要修改代码,从一个版本库开始的方法:
- git是git clone
- svn是svn checkout
提交代码至远程服务器的方法:
- git是git commit -am 'comment' 提交至本地的代码库,若要提交至远程服务器,再执行git push
- svn 则很简单,svn commit即可
从中央服务器更新到本地代码的方法:
- git是git fetch到本地代码库,然后再git merge,简单的办法是 git pull
- svn很简单 svn update
撤销本地修改:
- git是git checkout . (该命令就是将本地的workspace修改撤销至本地代码库)
- svn是删除掉修改的文件,然后svn update
比较差异:
- git是 git diff (获得当前workspace还没有计划提交的差异,若计划提交后但仍未提交至本地代码库则用git diff --cached)。 git diff <remote_branch> <branch> (比较本地代码库和服务端的差异),一般的命令就是 git origin/master master
- svn 则是svn diff即可
其他一些问题:
git 的本地代码库commit的撤销:
- git revert 这个会撤销本地代码库的修改,但这个动作本身会创建一个版本,因此很容易搞混。
- git reset --hard HEAD 这个会撤销本地代码库的修改。
git push 目标分支:
git push 可以将local的分支push到远程不同的分支上(non-fast-forwording),但是最好不要这么做。
合并本地分支:
git merge 和 git rebase, 这两个的动作都可以合并,但最终得到的分支线路会不太一样。
最简单的类似svn的工作流程:
有用的参考:
- http://progit.org/book/zh/
- http://book.git-scm.com/index.html
- http://schacon.github.com/git/everyday.html