Git基础知识(一)
Git的特点
直接记录快照,而非差异比较
概念上来区分,其它大部分系统以文件变更列表的方式存储信息. 这类系统(CVS、Subversion、Perforce、Bazaar等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
Git 更像是把数据看作是对小型文件系统的一组快照。每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git 对待数据更像是一个快照流。
近乎所有操作都是本地执行
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
使用其它系统,做到如此是不可能或很费力的。 比如,用 Perforce,你没有连接服务器时几乎不能做什么事;用 Subversion和CVS,你能修改 文件,但不能向数据库提交修改(因为你的本地数据库离线了)。
Git保证完整性
Git 中所有数据在存储前都计算校验和,然后以校验和来引用。若你在传送过程中丢失信息或损坏 文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。
这是一个由 40 个十六进制字符(0-9 和 a-f)组 成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:
1 | 24b9da6552252987aa493b52f8696cd6d3b00373 |
Git一般只添加数据
你执行的 Git 操作,几乎只往 Git 数据库中增加数据。 很难让 Git 执行任何不可逆操作,或者让它以任何方式清 除数据。
Git的三种状态
已提交(committed)
:数据已经安全的保存在本地数据库中已修改(modified)
:修改了文件,但还没保存到数据库中已暂存(staged)
:对已修改的文件的当前版本做了标记,使它包含在下次提交的快照中
Git项目的三个工作区域:Git仓库
,工作目录
,暂存区域
- Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
- 工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作索引,不过一般说法还是叫暂存区域。
基本的Git工作流程
在工作目录中修改文件。
暂存文件,将文件的快照放入暂存区域。
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
起步
使用git config
工具来帮助控制Git外观和行为。
配置用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称
与邮件地址
。每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
1 | git config --global user.name 你的姓名 |
例如:
$ git config –global user.name “John Doe”
$ git config –global user.email johndoe@example.com
检查配置信息
git config --list
:列出所有Git当前能找到的配置
git config <key>
:通过指定的方式查看某一项
获取帮助
合理使用git自带的帮助文档,可以解决大部分的问题
例如git help config
还有其他方式找到Git命令的使用手册。
git help
git
- -help man git-
Git基础
有两种方式开始Git的学习:在现有项目或目录下用Git进行管理
,从服务器克隆一个现有的Git仓库
在现有目录中初始化仓库
使用git init
就可以初始化一个空的Git仓库
其中**.git**文件夹中包含了初始化Git仓库中所有的必须文件,这些文件是Git仓库的骨干。
克隆现有仓库
以我在GitHub上的一个项目为例:https://github.com/zx490336534/spider-review。
输入url地址打开页面后点击Clone or download
把弹出框中的地址复制出来:https://github.com/zx490336534/spider-review.git
在本地找一个文件夹
1 | git clone https://github.com/zx490336534/spider-review.git |
这样克隆会自动在当前目录下新建一个项目同名的文件夹,也可以自定义一个名称
1 | git clone https://github.com/zx490336534/spider-review.git 666 |
记录每次更新到仓库
这一小节的目标的学会这一个文件的状态变化周期图
从最上方的箭头开始
Add the file
:从Untracked指向Staged,也就是从未跟踪到暂存区,需要学会git status和git add两个指令
首次新建的文件都是untracked状态(未跟踪),此时需要git add
到暂存区,Git便会在暂存区中生成一个该文件的索引。
1 | touch README.md |
touch README.md
:创建一个名为README.md的文件,对应Untracked对象的创建
git add README.md
:把新建的README.md文件提交到暂存区,对应Add the file
git status
:查看文件处于什么状态
从上面操作可以看出,如果我新建了一个文件,但是没有使用git add,那么它就还是Untracked,可以结合git status进行试验
开始下面一个箭头Edit the file
,但是我们需要一个Unmodified状态的文件,在学习了Add the file流程之后我们拿到了一个Staged状态的文件README.md,从图中可以看出,从Staged变为Unmodified需要经过Commit
流程。
那我们暂时先学习Commit
流程:
使用的语句为git commit -m '描述信息'
1 | git commit -m '从Staged状态变为Unmodified状态' |
再使用git status可以看到已经没有之前绿色的语句了(新文件: README.md)
下面返回正题,学习Edit the file
,使用编辑器修改一下README.md文件
修改之后使用git status查看文件当前的状态
这样就完成了Edit the file
流程了,通过阅读提示信息可以知道,我们要用git add <文件>
更新要提交的内容。从Add the file流程可以看出,git add的作用就是把东西放入Staged(暂存区),所以使用这句指令就完成了Stage the file
流程了
最后最后还有一个Remove the file
流程,我们使用上面学过的Commit
流程把README.md文件的状态变成Unmodified
1 | git commit -m '修改README.md' |
使用git rm READE.md就能删除处于Unmodified的文件了,可以看到提示信息是绿色的,所以还需要一步commit操作
1 | git commit -m '删除README.md' |
我们可以用git log查看提交历史,从图中可以看出,我们全部commit操作都被记录了。