1.版本控制
版本控制(Version Control System)目前主要分两大流派。
1.1集中化
集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )代表产品有cvs、Subversion等。它们都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
其中,最明显的缺点是中央服务器的单点故障
1.2分布式
分布式版本控制系统( Distributed Version Control System,简称 DVCS )代表产品有Git,Mercurial等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜 像出来的本地仓库恢复。
2.git原理
2.1理解代码的位置
通常情况下,在分布式版本控制中,代码存放在三个重要的位置:远程仓库(Remote)、本地仓库(Local)和当前工作空间(workspace)。
暂存区(index)本质是个数据结构,维护指向不同的文件版本的索引,只有在该空间建立索引,才能跟踪文件的状态,一般都放在 Git 目录中。
zhangweikuang@xb:~/code/ahc$ ls .git COMMIT_EDITMSG ORIG_HEAD description info packed-refs FETCH_HEAD branches hooks logs refs HEAD config index objects
2.2理解git文件状态
对应的,git文件有4种状态:
- Untracked状态: 未跟踪。 通过*git add*,*git commit*可将它置入跟踪状态。
- Unmodified:已经在库中,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两个去处,如果它被修改,而成为modified;如果使用*git rm*移出版本库,则成为untracked文件。
- Modified状态: 文件已修改,仅仅是修改,并没有进行其它操作。这个文件也有两个去处,通过 git add 可进入暂存(staged)状态,使用 git checkout -- fileName 则丢弃修改,返因到unmodify状态。这个checkout很好理解,就是取出库中文件,覆盖当前文件。
- Staged状态:暂存状态,有的资料里叫index状态,即为指定文件建立版本跟踪(索引)信息。执行 *git commit 则将修改同步到库中,这时库中的文件与本地文件又一致了,于是文件是unmodify状态。执行 git reset HEAD filename 取消暂存(其实质是用仓库中某个版本库的fileneme覆盖当前Staged内的同名filename文件),文件状态变为modified。
3.git 最常用命令
3.1正常流程
几个人协调完成一次需求的开发,最常用命令如下:
1.下载代码
git clone git://github.com/xxx/xxx.git
2.切换分支
git checkout -b branchName
导入ide进行开发
3.查看修改
git status
4.提交到暂存区(index)
git add xxx git add -A
5.提交到本地仓库(Local Repository)
git commit -m '修改备注内容'
6.提交到远程仓库
先更新:git pull origin branchName 再提交:git push origin branchName
3.2注意点
以上的流程是比较顺利的流程,下面再提几个注意点:
1.步骤4和5可以合并,简化为
git commit -a -m '修改备注内容'
2.提交改动时,忽略某些文件
给一个示例,需要手动编辑.gitignore文件
zhangweikuang@xb:~/code/moon$ cat .gitignore # Java class files *.class # Eclipse project files .classpath .project # Intellij project files *.iml *.ipr *.iws .idea/ # War target/
3.步骤5如果不想提交,可以移除部分文件
git rm xxx
4.查看提交历史
git log
5.取消已暂存的文件
git reset HEAD yyy
note:
以上只是给出了个人在使用git过程中常用的一些命令。
4.参考资料
Git详解之一 Git起步 - http://www.open-open.com/lib/view/open1328069609436.html
等