为什么要用git?
1.
svn之类的"Centralized Version Control Systems"有什么问题?
a.服务器的单点问题。服务器一旦当机,所有人都无法提交改动了。
b.如果服务器硬盘坏了,而又没有备机,那你将损失所有revision history
2.
git之类的"Distributed version control system" 如何解决上述问题?
客户端存有的文件并不仅仅是最新版本,而是整个repository的镜像。每次checkout都是一次完整的复制。
a.如果服务器硬盘坏了,可以根据客户端的文件恢复
b.由于你镜像了整个repository,所以很多操作都只需在本地完成,速度很快; 而且如果服务器连不上,照样可以看revision history
基本概念
1.
git的三种状态
a.committed — 修改已存入本地数据库
b.modified — 文件被修改,但还没有提交到本地库
c.staged — 文件被修改,并且已经被你标识了“将要”进库 ?
2.
几种文件/目录的定义
a. Git directory — 相当于svn的repository目录,用于存放元数据;既然git是"distributed", 所以你的本地和服务器上都会有这个目录。
b. Working directory — 相当于svn的working directory
c. Staging area — 是一个文件,记录哪些内容将被提交。这个文件一般在Git directory里面。
3.
工作流
a. 在working directory里修改文件,文件进入modified状态
b. 标识这些文件,文件进入staged状态,Staging area被更新
c. 提交。Staging area里的文件会进入working directory,并进入committed状态
例示git命令的使用
1.
把某个已有的项目加入git
cd myproject
git init #把本目录里变成git directory
git add *.java #加入所有文件
git commit #提交
2.
增改文件
#增
git add README
git status
git commit
#改
vi README
git diff
git status #将提示Changed but not updated,下次提交时不会提交任何东西
git add README #这就是stage,告诉git下次我将提交README
git status
git diff –staged
git commit
#不用git add,直接提交
vi README
git commit -a
3.
玩远程的
git remote add origin git@github.com:chenjianjx/learn-visitor-pattern.git #定义一个remote repository,取名为origin
git remote -v #察看刚刚定义好的remote repository
git push -u origin master #将本地所有更新提交到远程repository
#直接clone一个
git clone git://gitorious.org/opentaps/opentaps-2.git opentaps-2
cd opentaps-2
(待续…)