git详细解释【使用以及原理】

git

本文以平时工作经历+pro git书籍内容进行阐述,算是做个学习笔记。

版本控制系统

  • 本地版本控制系统

Mac OS X系统上通过rcs命令进行保存并且管理文件补丁,补丁记录着对应文件修订前后的变化

  • 集中化版本控制系统

类似于CVS,Subversion,Perforce之类的,主要核心在于有一个核心服务器负责管理所有文件的修订版本。

  • 分布式版本控制系统

Git、Mercurial、Bazaar之类的,客户端不只提取最新的文件版本,而且把repository全部克隆下来

**总结 :simle: **

种类 优点 缺点 特点
本地版本 简单,单机部署 不适合多人操作 使用补丁形式记录文件信息
集中化 容易管理,易于掌握其他人进度 但若服务器宕机,则服务中止,且易于丢数据,无法协同工作 记录各个文件的差异
分布式 即便服务器故障,也可以轻松commit或者回滚历史,操作方便,只要操作完后再push到repository即可,且即便服务器挂了,也可以上传本地 项目镜像庞大 把变化的文件做一次快照,不变的则指向上一个快照的,类似于文件系统

git知识【只针对git进行讲解】

状态

  • committed 已提交

数据已存放在本地数据库中

  • modified 已修改

修改但未保存

  • staged 已暂存

把已修改的文件放在下次提交时要保存的清单中

  • untracked 未跟踪

不想要加入git的,创建.gitingnore文件,按照正则匹配模式设置一下即可

使用【安装略】

git config --global user.name "tyrantqiao"
git config --global user.email "[email protected]"

若不用global则设定保存在当前项目的.git/config下

  • 查看提交情况

git log -p -2 --stat --pretty

  • 修改最后一次更改情况

git commit --amend

git存储数据

例如有test.log文件,执行git add test.log将test.log添加到暂存区中,这时会对文件进行校验和(SHA-1哈希字符字串)然后将当前版本的文件快照保存到git仓库中【快照以blob的形式存储下来】其后将校验和加入暂存区域。

当执行git commit时,git先计算每一个子目录的检验和,再将目录存为树对象,之后git创建提交对象,加上那些作者信息等等,包含指向树对象【根目录】的指针,这样就可以到时再回滚回来。

对象也就有: blob【test.log】 tree【根目录加子目录】 tree【根目录】

分支

  • master 默认分支
  • head git系统的当前分支
  • 合并分支问题:
    • fastforward master->hotfix 合并时,直接将两个指针指向hotfix的快照即可,而当操作完成后,即可以删除掉无用的分支例如hotfix
    • 分岔分支的合并:自动合并,且若有冲突时,需要解决,或者可以加上force的命令
  • 分支模式种类
    • 长期分支: 拥有多个开放的分支,各个分支负责特定的任务,对于大型项目时这种易于管理,像可以分为基础,前端,后端,bug分支等等。
    • 特性分支【topic】:一个短期的,用来实现单一特性与其相关工作的分支,可以理解为一个任务的多种实现,然后在其中抉择较好的任务进行选择。

原博地址,喜欢的也可以在里面找其他方面的内容,有问题的话也可以提出来大家一起解决

你可能感兴趣的:(学习笔记)