git add与commit原理

本文介绍了git在文件内容发生变化时如何管理和追踪修改。通过创建并操作一个git仓库,详细展示了`git add`和`git commit`操作后,`git`在`objects`目录下的变化,以及如何通过`git cat-file`命令查看blob和tree对象。重点讨论了如何生成文件名ID以及index文件在暂存区中的作用。最后解释了commit、tree和blob对象的文件名ID生成原理,揭示了git如何构建代码目录结构和维护版本历史。
摘要由CSDN通过智能技术生成

在未接触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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值