关于git:.gitignore和.gitkeep有什么区别?

What are the differences between .gitignore and .gitkeep?

.gitignore.gitkeep有什么区别?它们是具有不同名称的相同事物,还是都具有不同的功能?我似乎找不到关于.gitkeep的很多文档。


.gitkeep没有文档记录,因为它不是git的特性。

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

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


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

如果您想要一个空目录,并确保它对git保持"干净",那么创建一个包含以下行的.gitignore

1
2
3
4
5
6
7
8
# .gitignore sample
###################

# ignore all files in this dir...
*

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

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

1
2
3
4
5
6
7
8
9
10
11
# .gitignore to keep just .txt files
###################################

# filter everything...
*

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

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

""表示注释。)


1
.gitignore

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

1
.gitkeep

因为Git删除或不向回购中添加空目录,所以GitKeep在回购中保留空目录有点像黑客(我认为它不是正式命名为Git的一部分)。

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