在.gitignore我有
phpmyadmin
.idea
config.php
admin/config.php
system/cache/*
system/logs/*
image/cache/*
git以某种方式忽略了config.php
system/library/config.php
为什么会发生这种情况的文件?以及如何避免这种情况?
答案 0 :(得分:2)
如果包含不包含/
的文件名(或glob),Git将忽略与目录树中任何位置匹配的文件。
如果您只想忽略顶级目录中的config.php,可以添加一个前导斜杠以确保它只匹配顶层:
/config.php
正如.gitignore
documentation(man 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 规则或文件。可能有一个旧项目的剩余物。