索引,缓存和在git中上演有什么区别?
这些都是一样的吗? 如果是这样,为什么有这么多条款?!
另外,我知道有一件名为git stash的东西,它可以暂时存储工作副本的更改,而无需将它们提交到回购站。 我发现这个工具非常有用,但是再一次,这个名字与git中的其他一些概念非常相似 - >这很混乱!
索引/阶段/缓存是同样的事情 - 至于为什么这么多的术语,我认为这个索引是'原始'术语,但是人们发现它很混乱,所以引入了其他术语。 我同意,起初它有时让事情有点混乱。
git的stash
工具是一种存储'正在进行'的工作的方式,你现在不想在一个提交对象中存储在特定的存储目录/数据库中)。 基本的stash
命令将存储对工作目录所做的未提交更改(缓存/暂存和未缓存/非暂存更改),然后将工作目录还原为HEAD。
它与索引/阶段/缓存没有真正的关系,只是它将存储缓存中未提交的更改。
这使您可以快速保存脏工作目录和索引的状态,以便在干净的环境中执行不同的工作。 稍后,您可以取回存储对象中的信息并将其应用于您的工作目录(即使工作目录本身处于不同的状态)。
官方的git stash
具有相当不错的细节,但仍然可以理解。 它也有很好的例子说明如何使用stash
。
这确实很令人困惑。 这三个术语可以互换使用。 这是我为什么称这些事情的原因。 git索引是:
.git/index
是所有跟踪文件的索引 需要注意的是,索引/缓存/阶段包含源控制下的所有文件列表,甚至不变。 不幸的是,诸如“将文件添加到索引”或“文件被分级到索引”之类的短语可能会误导性地暗示该索引仅包含更改后的文件。
这是一个演示,显示git索引包含所有文件的列表,而不仅仅是已更改的文件:
# setup
git init
echo 'x' > committed.txt
git add committed.txt
git commit -m 'initial'
echo 'y' > staged.txt
git add staged.txt
echo 'z' > working.txt
# list HEAD
git ls-tree --name-only -r HEAD
# committed.txt
# list index
git ls-files
# committed.txt
# staged.txt
# raw content of .git/index
strings .git/index
# DIRC
# committed.txt
# staged.txt
# TREE
# list working dir
ls -1
# committed.txt
# staged.txt
# working.txt
补充阅读:
https://www.kernel.org/pub/software/scm/git/docs/technical/racy-git.txt
git索引包含什么?
链接地址: http://www.djcxy.com/p/50877.html上一篇: What's the difference between the index, cached, and staged in git?