.gitignore和.gitkeep有什么区别?

时间:2011-08-29 12:11:05

标签: git gitignore

.gitignore.gitkeep之间有什么区别?它们是不同名称的同一个东西,还是它们都起着不同的作用?我似乎无法在.gitkeep上找到太多文档。

5 个答案:

答案 0 :(得分:2982)

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

Git cannot add a completely empty directory。想要在Git中跟踪空目录的人已经创建了将名为.gitkeep的文件放在这些目录中的约定。该文件可以被称为任何东西; Git对此名称没有特别的意义。

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

答案 1 :(得分:273)

.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

('#'表示评论。)

答案 2 :(得分:114)

.gitignore

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

.gitkeep

由于git删除或不添加空目录到repo .gitkeep是一种黑客攻击(我不认为它被正式命名为git的一部分)来保留repo中的空目录。

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

答案 3 :(得分:1)

许多人只喜欢使用.keep,因为约定与git无关。

答案 4 :(得分:0)

这不是对原始问题“ .gitignore和.gitkeep有什么区别?”的答案。但在此处发布内容可以帮助人们以一种简单的方式跟踪空目录。要跟踪空目录并知道 key1 key2 key3 msg 0 abc aa aa happy 1 aa efg aa mad 2 aa aa xyz smile 3 sdf sdf aa great 不是git的正式组成部分,

enter image description here

只需在其中添加一个空的(无内容)let arr13 = ["name", "age", "hobby", "habit", "vocation"]; let arr14 = ["superhero", 40, "swimming", "drinking", "programming"]; let mapped = {}; for (let i = 0; i < arr13.length; i++) { mapped[arr13[i]] = arr14[i]; } console.log(mapped); 文件。

例如如果您有.gitkeep,有时.gitignore的目录可能是空的,则创建一个没有内容的空文件/project/content/posts,以在git中跟踪该目录及其将来的文件。