协慌网

登录 贡献 社区

.gitignore 和. gitkeep 有什么区别?

.gitignore.gitkeep什么.gitkeep ?它们是不同名称的同一个东西,还是它们都服务于不同的功能?我似乎无法在.gitkeep上找到太多文档。

答案

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

Git 无法添加一个完全空的目录 。想要在 Git 中跟踪空目录的人已经创建了在这些目录中放置名为.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 删除或不添加空目录到 repo .gitkeep 是一种 hack(我不认为它被正式命名为 git 的一部分)来保留 repo 中的空目录。

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