gitignore和.gitkeep之间有什么区别?它们是同一件事,但名称不同,还是都具有不同的功能?

我似乎在.gitkeep上找不到太多文档。


.gitkeep没有文档记录,因为它不是Git的一个功能。

Git无法添加完全空的目录。想要跟踪Git中空目录的人已经创建了将名为.gitkeep的文件放在这些目录中的惯例。该文件可以称为任何文件;Git对这个名字没有特别的意义。

在空目录中添加.gitignore文件以跟踪它们,这是一种相互竞争的惯例,但有些人认为这是令人困惑的,因为目标是保留空目录,而不是忽略它们。gitignore还用于列出Git在查找未跟踪文件时应忽略的文件。


.gitignore

是一个文本文件,包含目录中git将忽略或不在存储库中添加/更新的文件列表。

.gitkeep

由于Git删除或不将空目录添加到存储库中,.gitkeep是一种在存储库中保留空目录的黑客(我不认为它正式命名为Git的一部分)。

只需触摸/path/to/emptydirectory/.gitkeep添加文件,Git现在就可以在存储库中维护这个目录了。


.gitkeep只是一个占位符。一个虚拟文件,所以Git不会忘记目录,因为Git只跟踪文件。


如果您想要一个空目录并确保它对Git保持“干净”,请创建一个.gitignore,其中包含以下行:

# .gitignore sample
# Ignore all files in this dir...
*

# ... except for this one.
!.gitignore

如果您希望只有一种类型的文件对Git可见,下面是一个如何过滤掉所有文件的示例,但.gitignore和所有.txt文件除外:

# .gitignore to keep just .txt files
# Filter everything...
*

# ... except the .gitignore...
!.gitignore

# ... and all text files.
!*.txt

许多人喜欢使用just.keep,因为惯例与git无关。


这不是对原始问题“.gitignore和.gitkeep之间有什么区别?”的回答,而是在这里发布,帮助人们以简单的方式跟踪空目录。为了跟踪空目录并知道.gitkeep不是git的官方部分,

只需在其中添加一个空的(没有内容).gitignore文件。

例如,如果您有/project/content/posts,有时posts目录可能是空的,那么创建空文件/project/concontent/posts/.gitignore,其中没有内容来跟踪该目录及其在git中的未来文件。