.gitignore排除所有目录中的文件

时间:2015-09-07 20:36:38

标签: git gitignore

在.gitignore我有

phpmyadmin
.idea
config.php
admin/config.php
system/cache/*
system/logs/*
image/cache/*

git以某种方式忽略了config.php system/library/config.php为什么会发生这种情况的文件?以及如何避免这种情况?

3 个答案:

答案 0 :(得分:2)

如果包含不包含/的文件名(或glob),Git将忽略与目录树中任何位置匹配的文件。

如果您只想忽略顶级目录中的config.php,可以添加一个前导斜杠以确保它只匹配顶层:

/config.php

正如.gitignore documentationman gitignore)所述:

  
      
  • 如果模式不包含斜杠/,Git会将其视为shell glob模式,并检查相对于.gitignore文件位置的路径名匹配(相对于工作树的顶层,如果不是一个.gitignore文件)。
  •   
  • 否则,Git将模式视为适合fnmatch(3)使用FNM_PATHNAME标志消耗的shell glob:模式中的通配符与路径名中的/不匹配。例如,“Documentation / * .html”匹配“Documentation / git.html”,但不匹配“Documentation / ppc / ppc.html”或“tools / perf / Documentation / perf.html”。
  •   
  • 前导斜杠与路径名的开头匹配。例如,“/ *。c。”匹配“cat-file.c”但不匹配“mozilla-sha1 / sha1.c”。
  •   

答案 1 :(得分:1)

您可以尝试从该路径的gitignore规则中排除该文件:

config.php
!system/library/config.php

gitignore了解详情:

  

[The]前缀" !"否定了这种模式;之前模式排除的任何匹配文件将再次包含在内   如果排除该文件的父目录,则无法重新包含文件

请注意,使用git 2.9.x / 2.10(2016年中期?),如果排除该文件的父目录if there is no wildcard in the path re-included,则可能会重新包含文件。

Nguyễn Thái Ngọc Duy (pclouds)正在尝试添加此功能:

答案 2 :(得分:0)

按照@VonC的建议添加!system / library / config.php应该可行。 至于为什么它首先被忽略,试着看看你的全球gitignore 规则或文件。可能有一个旧项目的剩余物。