我有一个关于Git基础知识的问题.
基本上,在Git中被称为"添加到索引"的行为是什么意思?我这样理解:
如果任何文件git计算SHA-1总和,那么基本上添加到索引意味着它计算SHA-1总和并将文件添加到暂存区域.
我对么?
jub*_*0bs 51
"将文件添加到索引","暂存文件","将文件添加到暂存区域"都是同义词.
我个人更喜欢使用术语暂存区来索引,因为它有助于形成一个有用的比喻.如果提交类似于"拍摄快照",则分段是关于" 构图 ".
想象一下你自己是一个专业的摄影师,想要拍摄一张照片:你收集所有的主题并让它们为照片做好准备,你要确保它们都在那里并且没有入侵者,重要的一切都在框架中等等......然后......抓住!

当然,如果你意识到,在拍完照片之后,太多的孩子闭着眼睛(或者有些孩子正在给老师兔子耳朵!),你可能想要废弃第一张照片并拍摄另一张更好的照片; 在Git中,这将对应于修改最后一次提交.但我离题了......
为了演出某些东西,你通常会使用高级("瓷器")git add命令......或者完全相同的git stage(由Scott Chacon围绕Git v1.6引入),我发现它更加直观,但似乎并不像流行.
将新文件添加到临时区域时,会发生以下三种情况:
.git/index文件中.作为一个实验,为了修复想法,你可以使用低级("管道")Git命令来重现git add那个简单情况下的功能.从全新的存储库开始:
$ cd ~/Desktop
$ mkdir teststage
$ cd teststage
$ git init
Run Code Online (Sandbox Code Playgroud)
在做任何其他事情之前,请继续并查看该.git/objects文件夹.
$ ls -la .git/objects
Run Code Online (Sandbox Code Playgroud)
您将看到它只包含两个(空)子目录:info和pack.创建一个文件,说README.md:
$ printf "hello\n" > README.md
Run Code Online (Sandbox Code Playgroud)
现在让我们分阶段README.md,一步一步.首先,使用lower-level git hash-object命令(1)散列内容README.md和(2)将后者写入存储库的数据库.
$ git hash-object -w README.md
27728344ab3ae5b8aa334418d1e1b0f5be0ea0cc
Run Code Online (Sandbox Code Playgroud)
(-w意思是写在这里.)
现在,如果查看该.git/objects文件夹,您将看到新对象(blob)已添加到数据库中:
$ tree -la .git/objects/
.git/objects
??? 27
? ??? 728344ab3ae5b8aa334418d1e1b0f5be0ea0cc
??? info
??? pack
Run Code Online (Sandbox Code Playgroud)
还有一件事要完成升级README.md.我们需要(3)将文件内容注册到索引.看看里面.git,应该没有调用index它的文件.现在,如果你跑了
$ git update-index --add --info-only README.md
Run Code Online (Sandbox Code Playgroud)
然后再看看里面.git,你会看到index已经创建了一个二进制文件.
而已.你上演了README.md.它已准备好进入你的下次提交.自己检查一下:
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Run Code Online (Sandbox Code Playgroud)
现在,如果需要,您可以进行第一次提交.
| 归档时间: |
|
| 查看次数: |
13239 次 |
| 最近记录: |