第四章 基本Git 概念
Git 对象库被组织及实现成一个内容寻址的存储系统。具体而言,对象库中的每个对象都有一个唯一的名称,这个名称是向对象的内容应用SHA1 得到的SHA1 散列值。如果这些文件中的一个发生变化,Git 会为它计算一个新的SHA1 散列值,识别它现在是一个不同的blob对象,然后把这个新的blob加入对象库中。
4.1.7 打包文件
Git 是由内容驱动的,所以它并不真正关心它计算出来的两个文件之间的差异是否属于同一个文件的两个版本。这就是说,Git可以在版本库中的任何地方取出两个文件并计算差异,只要它认为它们足够相似来产生良好的数据压缩。
文件与树
查看文件的关联
git ls-files -s
git write-tree
find .git/objects
git cat-file -p 68eee
第5章 文件管理和索引
Git 在工作目录和版本库之间加设了一层索引(index),用来暂存(stage)、收集或者修改。只有在提交后才会在版本库里实积累的变更。
5.2 Git文中的文件分类
- tracked
- ignored
- untracked
git status
git add data .gitignore
git ls-files --stage
git hash-object data
5.4.1 使用 git commit –all
git commit --all -m "2"
由于subdir/ 是一个全新的目录,而且该目录下没有任何文件名或者路径是已追踪的,所以,即使是-all选项也不能将其提交。
YuXiaos-MacBook-Pro:commit-all-example yuxiao$ git ls-files --stage
100644 53fa42a4db059d7fda5bd65e1a90f6814bdf7433 0 notyet
100644 fcd87b055f261557434fa9956e6ce29433a5cd1c 0 oops
100644 f6976376d6fc02825ac60b5e58217ce27b0cf544 0 ready
YuXiaos-MacBook-Pro:commit-all-example yuxiao$ git rm --cached oops
rm 'oops'
YuXiaos-MacBook-Pro:commit-all-example yuxiao$ git ls-files --stage
100644 53fa42a4db059d7fda5bd65e1a90f6814bdf7433 0 notyet
100644 f6976376d6fc02825ac60b5e58217ce27b0cf544 0 ready
uXiaos-MacBook-Pro:commit-all-example yuxiao
gitaddoopsfatal:pathspec‘oops′didnotmatchanyfilesYuXiaos−MacBook−Pro:commit−all−exampleyuxiao
git checkout HEAD – oops
YuXiaos-MacBook-Pro:commit-all-example yuxiao$ ls
notyet oops ready subdir
git mv 命令
YuXiaos-MacBook-Pro:commit-all-example yuxiao
gitmvoopsmyoopsYuXiaos−MacBook−Pro:commit−all−exampleyuxiao
git commit -m “Moved oops to myoops”
[master eefead2] Moved oops to myoops
2 files changed, 1 insertion(+)
rename oops => myoops (100%)
create mode 100644 subdir/new
YuXiaos-MacBook-Pro:commit-all-example yuxiao$ git log myoops
commit eefead2f72a3e68ae589a6be8e3cfa615c80dec9
Author: Lele Li lilelr@163.com
Date: Thu Nov 30 22:28:24 2017 +0800
Moved oops to myoops
YuXiaos-MacBook-Pro:commit-all-example yuxiao$ git log –follow myoops
commit eefead2f72a3e68ae589a6be8e3cfa615c80dec9
Author: Lele Li lilelr@163.com
Date: Thu Nov 30 22:28:24 2017 +0800
Moved oops to myoops
commit 9213eca5e877235146ecf227cb66c8733f15e141
Author: Lele Li lilelr@163.com
Date: Thu Nov 30 22:24:46 2017 +0800
add some files
“`
5.8 .gitignore 文件
优先级顺序
cat .gitignore
*.o
cat .gitignore
!driver.o
5.9 Git 中对象模型和文件的详细视图