从svn迁移到git

On 九月 26, 2011, in 技术记录, by pensz

最近需要从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的工作流程:

git workflow

有用的参考:

  • http://progit.org/book/zh/
  • http://book.git-scm.com/index.html
  • http://schacon.github.com/git/everyday.html
Tagged with: