忽略目录中除子文件夹外的所有内容的 Git 忽略规则

57

这是我的文件夹结构:

data/
    .gitignore
    uploads/
        .gitignore

我想要提交文件夹,但不想提交它们内部的文件。

所以我在每个文件夹中添加了一个.gitignore文件,其内容如下:

# Ignore everything in this directory
*
# Except this file
!.gitignore
问题在于*也会匹配目录,因此git仅跟踪data/.gitignore
3个回答

103

请不要滥用 .gitignore 文件。最好遵循默认方式进行操作,这样后来的开发人员可以快速进入您的项目。

  1. 在您想提交但没有包含文件的文件夹中添加一个空的 .gitkeep 文件。
  2. 将文件夹排除在您的 主要 .gitignore 文件之外,但不要将 .gitkeep 文件排除在外。

folder/*
!folder/.gitkeep
这将忽略文件夹中的所有文件,但不包括.gitkeep文件。现在该文件夹将只提交.gitkeep文件作为内容。

这将忽略文件夹中的所有文件,但不包括.gitkeep文件。现在该文件夹将只提交.gitkeep文件作为内容。


什么滥用?他有一个完全合法的需求,@nickel715正在以一个类似复杂度的技巧很好地解决它,与你提出的那个方案相似... - blueFast
3
因为 .gitignore 文件告诉后续的开发者“他/她需要查看该文件”才能发现被忽略的内容。此外,.gitignore 文件不能设置到除主目录以外的任何目录中。如果这样做,每个人都必须浏览所有子文件夹,以查看是否有被忽略的内容(并发现没有被忽略的内容),以确定实际上会出现在存储库或部署流程中。不要因为懒惰或不遵循惯例而为后来的开发者增加不必要的复杂性。 - kaiser
4
仍然忽略子目录。-1 - CommaToast
好的,@CommaToast,你有一个可重现的例子吗? - kaiser

48
解决方法很简单,只需在.gitignore文件中添加!*/即可忽略当前文件夹中的文件。
# Ignore everything in this directory
*
# Except this file
!.gitignore
# Except folders
!*/

-4

试试这个:

*.*
!.gitignore
!*/*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接