题 .gitignore和.gitkeep有什么区别?


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


1433
2017-08-29 12:11


起源




答案:


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

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

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


2620
2017-08-29 12:20



这不是一个更好的解决方案 README 文件在否则为空的子目录中,其中包含有关该子目录将用于什么的一些信息?有一个名为的文件似乎令人困惑 .gitkeep 这实际上并不是git的一部分。 - tamouse
@tamouse很多次,空目录的路径(例如文件夹的名称)足以表达它的目的(例如:模板/缓存,上传/拇指等)。在这些情况下,将自述文件放入其中每个都感觉多余。 - Halil Özgür
想要跟踪空目录的人应该在README中指示必须创建目录或使用他们的构建工具或任何需要该目录存在的工具创建目录; / - Rudolf Olah
@tamouse,@ tomouse:A .gitignore 文件有两行: * 和 !.gitignore 绰绰有余地传达正在发生的事情。如果需要更多详细说明,请使用以下命令在文件顶部添加注释 #  句法。 - Droogans
值得注意的是,流行的Rails框架稍微改变了这个约定 .keep 文件而不是 .gitkeep 保留这些空文件夹,因为git不是唯一不跟踪空文件夹的源控制系统。更多细节在这里: github.com/rails/rails/issues/2800 - Claudio Floreani


.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

('#'表示评论。)


222
2017-07-20 13:02



我自己喜欢这种做法。如果这些目录中有源代码,则不需要.gitkeep和一般的临时/缓存/用户内容,无论如何都会生成测试期间导致您还必须.gitignore这些文件 - chrisan
为什么你需要 ! 在前面 .gitignore ?这是为了逃避点吗? - Will
@Will - 不, ! 否定了以下部分,就像在编程中一样。 - sjas
没有必要 !.gitignore 在git ignore文件中,添加文件然后编辑它,或强制添加适当的内容(“*”忽略所有内容,或者只是确保文件夹存在) 进一步的例子。 - AD7six
从您的链接: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked. ------如果不是,并且你没有强力添加,你可能会忘记它。在琐碎的情况下,没有问题,但如果它是一个更大的文件,你可能会感到不安。运用 !.gitignore 防止你用脚射击自己。我更喜欢它,过去曾烧过自己。 - sjas


.gitignore

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

.gitkeep

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

做一个 touch /path/to/emptydirectory/.gitkeep 添加文件和git现在可以在存储库中维护此目录。


98
2017-08-29 12:21



你可以拥有尽可能多的人 .gitignore如果你不想每次都指定每个文件夹的完整路径,你可以随心所欲。 - sjas
我试着提到空目录列表 .gitkeep 文件,但它不会跟踪空目录,只有文件夹跟踪在哪里 .gitkeep 文件存在。为什么这样 ? - Pardeep Jain
.gitkeep不像.gitignore那样工作。它不是要保留的目录列表。它只是一个空文件,位于您想要保留的目录中。它可以命名任何你想要的.keep等。所以你可以有一个像/ foo / bar这样的目录,gitkeep文件将是/foo/bar/.gitkeep - Jim Munro