[Git]git概念扫盲

上篇提到git tag的清理,这篇开始逐步完善git的相关文档。
刚到公司时候其实接触的是svn,最近半年开始全面拥抱git。自己在以前就有了解过git的便捷性,但是苦于无法说服架构师,他主要认为换成git在公司会造成一定的学习成本…直到在北京被阿里*回来…
比如以前每个人工作前都需要先从版本库获取最新的代码,然后再去开始做自己的工作,否则很容易造成各种冲突;另外,即使svn加了乐观锁,但是一旦有人强制合并,依旧可能莫名其妙就丢失了很多代码。svn给开发者带来很多使用上的不便。

git历史

linux的创始人Linus于1991年创建了开源的linux,此后linux不断发展,有更多人参与到开发linux中。Linus由于觉得svn和cvs过于集中式需要联网且速度慢,因此开始linux的代码通过diff方式发给Linus,由Linus本人手工合并。但是随着代码规模的扩大,代码变得越来越难以维护。BitMover公司出于人道主义,将BitKeeper免费给linux社区使用。但是好景不长,Linus手下的人试图**BitKeeper的协议被BitMover公司发现了,收回了BitKeeper的免费使用权。Linus本可以道歉并好好管教手下的弟兄,但是实际情况是Linus花了两周时间自己写了一个基于C语言的分布式版本控制系统——Git。

集中式OR分布式

集中式

版本库集中存放在*服务器,每次都需要先从*服务器取得最新版本,完成代码后再将自己的代码提交到*服务器。缺点在于必须联网,网速慢的情况下不便使用。
[Git]git概念扫盲

分布式

无*服务器,每个人电脑都是一个完整的版本库,因此工作时不需联网,多个人同时改了同一个文件只需将各自修改推送给对方。但是在实际中,还是有一个类似于*服务器的电脑,以方便大家进行交换修改。
[Git]git概念扫盲

工作区、暂存区、版本库、远程仓库

四个区域

Git本地有四个工作区域:工作目录(Working Directory)暂存区(Stage/Index)资源库(Repository或Git Directory)git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:
[Git]git概念扫盲
Workspace: 工作区,平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面是提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

工作流程

git工作流程为:
1.在工作目录添加、修改、删除文件;
2.将需要进行版本管理的放入暂存区;
3.将暂存区的文件提交到仓库。
git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)。

四种文件状态

[Git]git概念扫盲
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.
如果使用git rm移出版本库, 则成为Untracked文件
Modified:文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

[Git]git概念扫盲