在未接触git前,当需要修改已稳定运行的代码时,我们一般都是先把文件copy一份,在copy的文件上进行修改,比如a.py 修改成a1.py, 或者b.py修改成b_new.py等等,这个非常不便于管理及无法对修改历史进行追踪.
因而我们看看git在文件内容发生变化时是如何重新命名的.
新建一个空目录git-test
在目录下执行以下操作
$ git init
Initialized empty Git repository in /home/duan/hc-work/git-test/.git/
重点关注objects部分有无变化
$ tree .git/objects
├── objects
│ ├── info
│ └── pack
现在来看一下git add之后,看看有哪些变化:
$ echo hello > hello.txt
$ git add hello.txt
$ tree .git
这里面多了一个叫index的文件及.git/object多了一个文件
$ tree .git/objects/
.git/objects/
├── ce
│ └── 013625030ba8dba906f756967f9e9ca394464a
├── info
└── pack
采用git cat-file 来分别查看文件名为ce013625030ba8dba906f756967f9e9ca394464a的文件类型与文件内容,注意这里可以简写,只要不产生文件名冲突即可. 其次注意objects目录的下一级目录是以id的前两个字符命名的。
$ git cat-file -t ce01362503
blob
$ git cat-file -p ce01362503
hello
git是如何生成文件名013625030ba8dba906f756967f9e9ca394464a的,根据git说明操作如下:
$ wc -c hello.tx