为什么我不能在git中提交一个空文件夹?

Dan*_*lan 7 git

这里的关键词是为什么。答案是很多问题,“ git不允许这样做”,但我想知道为什么它不允许这样做。

我一直在阅读有关git的体系结构,并且其中包含以下图像:

具有树节点的DAG

该图像显示, tree节点。从技术上讲,保存一个tree没有任何孩子的a看起来很简单。那么为什么git禁止这样做呢?

本书的一部分提到了这一点:

对于更改后的文件上方的每个目录(加上存储库根目录),将创建一个具有新标识符的新树对象。从新创建的根树对象开始创建DAG,该对象指向Blob(在此提交中重用文件内容未更改的现有Blob引用),并引用新创建的Blob代替该文件在先前树层次结构中的先前Blob对象。 。(blob代表存储在存储库中的文件。)

我觉得这可能是原因,但是对于我想要回答的内容来说,这有点掩饰细节。

fst*_*nis 5

原因实际上很简单-git索引中的目录仅作为文件路径的一部分存在。

如果您有目录dir1dir2,用dir1含有fileAfileBdir2fileC,git会犯以下(即添加以下索引文件):

  • dir1/fileA
  • dir1/fileB
  • dir2/fileC

换句话说,既不是dir1也不dir2是真正的提交,它们只是基于包含在其中的文件的路径隐式构造的。

现在,是否有更深层的原因,或者仅仅是使实现变得更容易,我不知道。


Pio*_*aba 5

GIT FAQ非常简单:

当前,Git索引(暂存区)的设计仅允许列出文件,并且没有足够的能力来进行更改以允许空目录的人已经足够在意这种情况以进行纠正。

链接:

https://git.wiki.kernel.org/index.php/GitFaq#Can_I_add_empty_directories.3F