0. 起步
本篇 blog 对应到 Pro Git 第二版的《起步》这一章。
1. git存储文件快照,不存储文件差异
解释:
- 对于 version1, git 和其他基于 delta 的版本控制系统, 都是添加 File A, File B, File C, 没区别;
- 对于 version2, File B没变化,File A和File C有变化,基于delta的版本控制系统,记录的是File A的delta、File C 的delta, git 则记录新的 A1, C1 文件, 而文件 B 由于没变化,因此存储一个指向文件B的指针。
2. git通过哈希值索引文件
git 在跟踪文件的时候,首先根据文件内容计算出 SHA-1 散列,是一个40位的十六进制数字。换言之, git 并不根据文件名字或内容索引, 如果两个文件名字或内容一致, 但是计算出的 SHA-1 不同, 那么索引也是不同的; 对于同一个文件,在version1的时候 和 version2 的时候文件内容有变化, 那么 sha-1 会变化, version2 的时候会使用新的 sha-1 来索引它。
在同一个目录下,不可能存在两个同名文件;如果两个文件 file1 和 file2 文件内容一致, 但是位于不同目录下,这是可能的,此时他们的 blob 对象 sha-1 相同,但是 tree 对象的 sha-1 不同。
这意味着对于 git 的操作, 几乎只往 git 数据库中添加数据。
3. working area, staging area, .git directory, remote 的关系
- working area: 修改了文件后,如果文件被git追踪过,那么它处于 modified 状态; 执行
git add
会让文件进入到 staging area; 也可从 .git 目录恢复文件,使用的是git checkout <file>
命令 - staging area: 被
git add
的文件处于 staging area, 当执行git commit
时, 是把 staging area 的东西,提交到.git
目录。也可以把 staging area 的文件恢复成和 .git 目录中(HEAD)一样, 使用的是git reset <file>
命令, 或者用git restore --staged <file>
命令。 但是注意,这样只是把 staging area 的修改挪到了 working area。 .git
directory: git 本身是分布式存储,.git
目录存储了完整的历史记录, 是一个数据库。- remote: git 是分布式版本控制系统,remote则相当于是不同的分布式节点之间的一个中转站, 也可以当作是另一个分布式节点。使用
git push
推送本地分支到远程, 使用git fetch
和git pull
拉取远程分支的更新, 使用git clone
执行初次的代码克隆。
4. 安装 git
对于 macOS:
brew install git # 安装最新版 git
brew install git-gui # 安装 gitk
5. 查询 git 命令帮助文档
5.1 web 网页形式查询完整帮助说明
git help <命令> --web
# 如:查询 rebase 命令:
git help rebase --web
5.2 简短的帮助文档
git <命令> -h
# 如:查询 rebase 命令基本用法
git rebase -h
再比如 git add -h
, 也提供了很多眼花缭乱的选项,目前个人只用过 git add .
, git add <file>
, git add <dir>
, git add -p <file>
这几种:
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 成为git砖家(3): Pro Git第一章《起步》
发表评论 取消回复