Git上手:Git扫盲区

Git 自述
Git 是由伟大的电脑程序员Linus Torvalds编写的一个开源的,分布式的版本控制系统软件。git

 

Git 核心原理
Git 利用底层数据结构,经过指向索引对象的可变指针,保存文件快照。程序员

PS:简单理解就是git是对象数据库,把git仓库里面文件(源码,图片,声音等文件)转化成一个对象数据,并记录在git仓库里面全部的文件增删改操做。算法

 

Git 工做原理数据库

1.git仓库下,被跟踪的文件全部操做(增删改)以后,就会对这些文件快照,而后保存到暂存区,当提交更新的时候,就会生成一条操做记录,保存到git的目录中去。windows

PS: 这里的git目录指项目中.git的目录,这个目录在windows上是隐藏的,若是想查看该目录,请设置文件夹选项,显示隐藏的文件、文件夹和驱动器。安全

 

Git 特色服务器

开源:使用c语言编写的,开放源代码,任何人都阅读源码,自由修改。网络

灵活:运行性能比Subversion快。(不管是建立分支仍是合并分支都是很是方便快捷)数据结构

           易于修复数据,不易损坏数据。分布式

           不占空间资源。

分布式:每一个客户端都有一个独立于远程服务器的本地仓库, 即便是在网络离线状态下,依然能够继续进行版本管理。

              每一个客户端都是能够从远程仓库克隆完整的仓库与提交历史记录到本地仓库。

              每一个客户端都拥有属于本身的访问权限,不受其余人影响。

              每一个客户端之间均可以互相推送补丁。

安全:拥有严格的代码提交权限体系。

           使用SHA-1算法验证数据的完整性。

 

Git 基本概念

工做区:指当前目录受git控制的目录。

暂存区:指当前目录受git控制的目录内文件改动。

本地仓库:指本地电脑上创建的git仓库,经过commit提交文件到本地仓库。

远程仓库:指非本电脑上创建的git仓库,(远程主机创建的git仓库),经过push提交文件远程仓库。

 
GIt 文件状态
已跟踪:当前目录下的文件已受git版本控制。
PS: 已跟踪文件下有三种状态。
          已提交:已跟踪文件已经保存在本地git数据库中。
         
已修改:已跟踪文件有改动,但尚未提交保存。
          已暂存:已跟踪文件中的已修改文件放在下次提交时要保存的清单中。
未跟踪:当前目录下的文件未受git版本控制。
 

Git 分支
master分支,指主分支,通常默认存放稳定版,发布版本的项目。
PS:建议设置为受保护的状态(不能轻易修改),各个分支推送请求不要自动合并master分支。
子分支,能够有多个分支。
常见分支:feature/topic分支:新功能分支。
                  release分支:正式发布分支,可理解为可执行分支。(类比master分支)
                  bug/fix/pu:有漏洞,待修复,待改进的分支。
                  dev:正在开发的分支,各个开发人员各自开发的分支。
                  next:合并稳定新功能的分支。
                  maint:除错维护的分支。

 

Git 分支获取

fetch:本地仓库更新到远程仓库的版本,不会合并分支。

         此方法须要经过git merge合并分支。

pull:工做区更新到远程仓库的版本,自动合并分支并提交。

         此方法容易引发文件内容冲突。

 

Git 分支合并

rebase:无需建立提交,把其余某一条分支的更改应用到另外一个分支上,(记住,另外一个分支不必定是master分支)

              此方法虽然保证线性提交记录,但偶尔会引发文件内容冲突,会删除日志中提交。

merge:建立提交,把当前某一条分支的全部更改都合并到另外一个分支,包括提交历史。(记住,另外一个分支不必定是master分支)

              此方法虽然不会保持线性提交记录,同时会增长全部人的提交记录,难以追溯属于本身的提交记录。

 

PS:慎用rebase,避免把rebase共享远程仓库。


补充:使用SVN 仍是 Git。
           若是项目参与的人员很少的话,规模不大的项目,保密性强,对Git不熟悉的团队,建议使用SVN。
           若是项目参与的人员多,规模大的项目,保密性不强,对Git熟悉的团队,建议使用GIt。(这里不是说GIt的保密性不强,而是项目只能在特定环境下进行开发,而且只能是本身搭建远程
仓库,不是使用第三方代码托管服务所搭建的远程仓库。)
 
总结:强烈推荐使用git,由于git是一个性能卓越的版本控制系统。
相关文章
相关标签/搜索