如何在Git仓库中递归忽略所有隐藏的目录/文件?

150

我希望Git忽略所有隐藏文件和目录。

  • .aptitude
  • .ssh/
  • .bash_rc
  • config/.hidden

有没有一个简单的规则可以覆盖所有这些而不需要逐个添加?

4个回答

201

只需在.gitignore中添加一个模式即可。

.*
!/.gitignore

编辑:添加了.gitignore文件本身(如果尚未提交,则很重要)。


3
根据你的需求,你可能需要强制添加一些必要的文件,例如 .htaccess 文件等。 - dakdad
3
谢谢您的建议。我对答案进行了修改。如果Poe已经提交了一些特殊的文件,如.htaccess,它们仍将被跟踪。.gitignore只对新文件很重要。 - Daniel Böhmer
@DanielBöhmer也许有点偏题,但是是否有理由只取消忽略/.gitignore而不管它位于何处的每个.gitignore文件呢?即为什么不列出!.gitignore(没有斜杠)? - Jason Young
1
@JasonYoung 有趣的问题。这个模式只是取消忽略文件本身。我认为这更加简洁,没有副作用,可以复制和粘贴示例。当然,你也可以在顶层的.gitignore文件中取消忽略任何.gitignore文件。但这个选择取决于你。 - Daniel Böhmer
如果你只想查看根用户下的隐藏文件,只需使用这行命令/.* - YGautomo

77

.gitignore 文件只会影响那些还没被'添加'的文件。

如果想让新的 .gitignore 条目生效,可以按以下步骤操作:

  1. 修改 .gitignore 文件
  2. git commit -a -m "Pre .gitignore changes"
  3. git rm -r --cached .
  4. git add .
  5. git commit -a -m "Post .gitignore changes"
  6. git status 应该输出 "nothing to commit (working directory clean)"

1
这里的关键是“还没有被‘添加’”,因为如果您已经提交了某个文件,则忽略将不再对其起作用,您必须从存储库中删除它,下次创建它时,.gitignore 将会忽略它。 - Georgi Peev

26

.git/info/exclude 文件中添加以下行:

.*

这将使得在机器上对每个仓库递归地忽略所有的隐藏/点文件成为默认设置。这种方式不需要为每个仓库单独创建一个.gitignore文件。


1
对我来说,.*不起作用,不能忽略例如notebooks/templates/.ipynb_checkpoints/。有效的方法是:
/**/.*  # ignore all dotted files
/**/.*/ # ignore all dotted folders
!/.gitignore  # except `gitignore` :)

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