一 git 的版本控制原理
像subversion等cvs,使用记录版本差异的形式来进行版本控制,如下图所示:
存储各个版本的差异git则使用快照的形式,为每一版本生成一个快照,对于没有修改的文件,则指向最后一次修改的快照,如下图所示:
生成版本快照git中所有的操作几乎都是在本地中操作的,无需网络连接到文件存储服务器,你只需在有网的时候将文件push到文件存储服务器中去就行了。git 在保存文件时为每一个文件都生成了一个索引,通过索引来引用文件,如果在上传文件的过程中发生了失败,git会检测到,保证了文件的完整性。
Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
git 创库,工作目录,暂存区域Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。
基本的 Git 工作流程如下:
1 在工作目录中修改文件
2 暂存文件,将文件的快照放入暂存区域
3 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录
如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
二 git 命令行
1. git config
初次运行git前,我们需要使用git config 来修改git 配置文件,git 的配置文件有三处:
1. /etc/gitconfig 包含了系统中的所有用户信息及创建的创库,可用 --system 访问
2. ~/.gitconfig 包含了当前用户的配置信息,可以用--global访问
3. 当前项目中的config文件(.git/config),包含了当前创库的配置信息
用户信息
用户身份的标识,每一次提交修改时都会使用用户信息来记录是谁做了修改
配置用户身份信息文本编辑器
配置默认文本编辑器了,当 Git 需要你输入信息时会调用它,如果未配置,默认将使用vim
配置默认编辑器检查配置信息
检查所有的配置信息
检查所有的配置信息检查单个配置项的配置信息
检查单个配置项的信息2 git 创库的基本操作
初始化一个创库
在你的工程目录中(或空目录),输入 git init 命令将在当前目录中建立一个创库,创库建立好后,git 将为我们自动的创建一个.git目录,该目录包含了该创库的所有的配置信息。
初始化一个创库如果工程目录中有文件,init后,这些文件是不会被跟踪的,需要我们提交到git暂存区域,然后在提交快照到创库中去。
跟踪文件克隆现有的创库
git clone 命令会克隆整个创库而不仅仅是创库中的对象数据
克隆一个现有创库git clone url [new_repository_name]
调用命令后会在当前目录中新增一个codes目录,该目录包含了现有创库中的所有的数据。通过第三个参数,修改现有创库在本地中的名称。
url支持多种协议(http[s]://(http协议), git://(git协议), user@server:path/(ssh 协议)),由配置git server 时决定。
3 更新创库
git 创库中的对象数据的变化周期
变化周期如果一个文件未加入git中的话,它是不会被跟踪的,不会有后面的已修改,已添加到暂存区域,已提交等状态
常用的命令总结:
1 git add 命令可以用来添加追踪,会直接提交到暂存区中去,也用来提交修改到暂存区中去
2 git reset HEAD 将提交到暂存区中的内存撤销
3 git resert ID 可以将整个库回退到某个指定的提交ID版本
网友评论