我从我的工作文件夹中的目录中删除了所有文件,但该目录本身仍然存在。将更改推送到远程存储库 ( GitHub ) 后,我检查了我的项目并注意到该目录已消失。Git是否有可能删除空文件夹?
slh*_*hck 98
为什么目录不显示?
Git 不跟踪目录;它只跟踪文件。
如果目录中没有文件,则在添加或删除文件时,该目录对 Git 来说“不存在”。特别是,当您从 Git 索引中删除所有文件并将该更改添加到索引时,目录将从 Git 索引中消失。反之亦然,如果目录为git add空,则不会通过添加目录。
换句话说:如果您可以在文件浏览器中本地看到该目录,但它从 GitHub 中消失了,那么您很可能从目录中删除了所有文件,将该更改添加到索引中,并提交并推送了它。
那么如何跟踪空目录呢?
如果要明确跟踪空目录,则必须在其中创建一个文件。由于 Git 不会跟踪空目录,因此您必须通过将目录中的文件添加到 Git 的 index.html 来诱使它这样做。
通常,人们将一个名为的文件存储.gitkeep在他们希望跟踪的目录中,但该目录暂时应保持为空。当然,您可以为文件指定任何其他名称,但名称.gitkeep是约定俗成的。大多数系统上的文件列表不会显示该.gitkeep文件(由于以 a 开头.)。
取而代之的是.gitkeep,一些用户还喜欢将README文件放在那里,最好首先简要说明为什么该目录必须存在。
例子
$ mkdir foo
$ git init
$ git add .
$ git ls-files # which files does Git know about?
# apparently, none
$ touch foo/bar # create a file in the directory
$ git add .
$ git ls-files # does Git know about it now?
foo/bar # yep!
Run Code Online (Sandbox Code Playgroud)
在这里,foo目录只有在有文件时才会添加到索引中。
如果我真的想跟踪一个空目录怎么办?
总而言之,原则上,底层数据结构允许 Git 存储一个空目录,因为它将由一个空的“树”表示。一些进一步阅读here和here。
将以下.gitignore文件添加到您希望包含在您的存储库中的文件夹中。
# Ignore everything in this directory
*
# Except this file
!.gitignore
Run Code Online (Sandbox Code Playgroud)
添加.gitkeep有效,但不是官方解决方案。见/sf/ask/506091981/
| 归档时间: |
|
| 查看次数: |
15331 次 |
| 最近记录: |