.gitignore 和. gitkeep 有什么区别?

.gitignore.gitkeep什么.gitkeep ?他们是同一个名字不同的事物,还是两者都发挥不同的作用?

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

答案

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

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

在空目录中添加.gitignore文件来跟踪它们是一种相互竞争的约定,但是有些人认为这令人困惑,因为目标是保留空目录,而不是忽略它们。 .gitignore也用于列出在查找未跟踪文件时应被 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

(“#” 表示注释。)

.gitignore

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

.gitkeep

由于 Git 会删除或不向存储库中添加空目录,因此. gitkeep 有点像一种 hack(我不认为它是 Git 的正式名称),可以将空目录保留在存储库中。

只需touch /path/to/emptydirectory/.gitkeep即可添加文件,Git 现在将能够在存储库中维护此目录。