Git暂存的文件存储在哪里?

4

我不确定,但这个问题突然在我的脑海中出现,所以我开始搜索它。我找到了很多关于staging的细节,但是没有找到git放置staged文件的确切位置。我的意思是,git是否有一个文件或文件夹来缓存对已暂存文件和文件夹的引用?如果是,那么它是哪个文件?

1个回答

11

暂存发生在 .git/index.git/objects 内部。前者包含路径,后者包含文件内容。虽然它们都是二进制的。

~/projects/bae/.git$ tree .
.
├── HEAD
├── config
├── description
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── prepare-commit-msg.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

8 directories, 13 files
~/projects/bae/.git$ cd ..
~/projects/bae$ touch test
~/projects/bae$ git add test 
~/projects/bae$ cd .git
~/projects/bae/.git$ tree
.
├── HEAD
├── config
├── description
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── prepare-commit-msg.sample
│   └── update.sample
├── index                                           <-- NEW (contains paths)
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391  <-- NEW (contains file content)
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

9 directories, 15 files
~/projects/bae/.git$ 

谢谢,但似乎它没有存储暂存的文件名。 - Om3ga
索引和缓存文件是二进制的。 - user41871
3
这些路径本身在.git/index文件中,虽然以二进制格式呈现。 - user41871
有垃圾,但你可以看到隐藏在垃圾中的路径。这里是一个部分示例:DIRC^@^@^@^B^@^@^@^DT|9\200^@^@^@^@T|9\200^@^@^@^@^A^@^@^D^AU\206\350^@^@\201\244^@^@^A\365^@^@^@^T^@^@^A\242\200&;2'R\204\310\362
\215|XN\336\350^O\275\247\230v^@^Lbuild.gradle^@^@^@^@^@^@T|!\215^@^@^@^@T|!\215^@^@^@^@^A^@^@^D^AU\206\342^@^@\201\244^@^@^A\365^
@^@^@^T^@^@\307J\311z\213\333\220\210\323p\332~\210xJz ;\227^Z\242:^@!gradle/wrapper/gradle-wrapper.jar
- user41871
无论如何,这是对原始问题(Git存储文件的位置)和随后的问题(Git存储文件名列表的位置)的答案。 :-) - user41871
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接