git:分布式。开发者能够提交到本地,每一个开发者机器上都是一个完整的数据库。两个开发者之间,能够经过打patch的方式交换文件。
git
svn:集中式。所谓 git 服务器,是指你们约定使用同一个网址提交、更新代码。这个网址能够是任何一个开发机。github
git 创建 branch 的速度更快,由于只保存增量。svn 的 branch 是一份完整的代码拷贝。数据库
git 工做区、暂存区的概念xcode
保存文件后,进入工做区安全
git add 后,进入暂存区ruby
git commit 后->产生提交记录,这时只要文件系统是好的,而且不执行 git reset --hard,那么你的全部修改都已经被安全的记录下来了服务器
git push 后 ->代码进入仓库,这时别人能够获取到你的代码了curl
刚接触git时,容易混淆的几个命令分布式
git reset --path:是git add 的反向操做。ide
git revert :不能指定单个文件,只能指定一个commid id,撤销此次commit的全部修改。撤销行为自己也会成为一个commit。
git checkout --path:不指定commit id时,是用暂存区的文件覆盖工做区的文件,不然用commit id中的文件版本,覆盖暂存区中和工做区中对应的文件。
经常使用的 svn 命令跟 git 命令做比较
svn | git | 备注 | |
更新 | git fetch --all git pull origin/xxx_branch |
git fetch — all 用来获取 git 仓库的 branch 更新信息; 若是指定了 track branch,git pull 能够不跟参数。 | |
提交 | git add xxx git commit -m “message" git push origin local:remote |
||
Update to Version | git checkout commit_id -- file |
git 里的 commit id至关于 svn 的 version | |
显示资源历史记录 | git log / gitk | 下面有 gitk 在 mac 系统的安装方法 | |
还原 | 丢弃本次修改到最近一次 commit 的状态: git checkout -- file |
SVN 的还原是指,丢弃本次修改,将文件或目录还原到与服务器一致的状态。 git 没有中央服务器的概念,所以“还原”能够理解为,将指定文件或目录,更新为最近一次提交的版本。 |
其余经常使用的 git 命令
git pull --rebase 本地有一些 commit 的前提下,但愿 merge 远程代码,同时保留以前的 commit 信息。
git cherry-pick 经过 git log 命令,找到某一个 commit id,但愿只 merge 这次 commit 的内容。
repo
有一个 manifest.xml 文件,记录若干git仓库,例如 AOSP 的管理。
gitk on Mac
一、命令行安装 HomeBrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)""
二、安装最新版 git
http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/
Step 3: Install Git
介绍git hook的好文章