[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本地有四个工作区域:工作目录(Working Directory)
、暂存区(Stage/Index)
、资源库(Repository或Git Directory)
、git仓库(Remote Directory)
。文件在这四个区域之间的转换关系如下:Workspace
: 工作区,平时存放项目代码的地方Index / Stage
: 暂存区,用于临时存放改动,事实上它只是一个文件,保存即将提交到文件列表信息Repository
: 仓库区(或版本库),就是安全存放数据的位置,这里面是提交到所有版本的数据。其中HEAD指向最新放入仓库的版本Remote
: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。
工作流程
git工作流程为:
1.在工作目录添加、修改、删除文件;
2.将需要进行版本管理的放入暂存区;
3.将暂存区的文件提交到仓库。
git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)。
四种文件状态
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