【发布时间】:2012-03-15 05:41:13
【问题描述】:
我有一个忽略图像文件以及其他一些文件的 git 存储库,但我的 .gitignore 文件只有它忽略了 config.php 文件。是否有一些我似乎找不到的全局忽略文件?我现在必须指定要添加它们的文件,它给了我这个警告:
您的 .gitignore 文件之一会忽略以下路径。
我的~/.gitconfig 文件的内容只是我的电子邮件地址。
【问题讨论】:
我有一个忽略图像文件以及其他一些文件的 git 存储库,但我的 .gitignore 文件只有它忽略了 config.php 文件。是否有一些我似乎找不到的全局忽略文件?我现在必须指定要添加它们的文件,它给了我这个警告:
您的 .gitignore 文件之一会忽略以下路径。
我的~/.gitconfig 文件的内容只是我的电子邮件地址。
【问题讨论】:
.gitignore:skip-worktree和assume-unchanged
文件可能会因为以下原因而被忽略:
.gitignore(全部组合)git update-index --skip-worktreegit update-index --assume-unchanged此外,如果文件在.gitignore 中并且已经在索引/缓存中暂存,则该文件可能会被 UNignored by。
检查上面列举的情况:
对于.gitignore排除的两种情况,比较输出:
git check-ignore --verbose --non-matching --no-index file1 file2 file3git check-ignore --verbose --non-matching file1 file2 file3git ls-files file1 file2 file3 | grep -E '^S'
git ls-files file1 file2 file3 | grep -E '^[[:lower:]]'
以下别名将涵盖上面列出的所有情况:
ignore = !"bash -c 'diff --unified=999999999 --color=always <(echo a; git check-ignore --verbose --non-matching --no-index . \"$@\") <(echo b; git check-ignore --verbose --non-matching . \"$@\")' - \"$@\" | tail -n+7; git hidden \"$@\" # Show ignore status of arguments. Files included by index are tagged with prepended '+'."
hidden = !"git ls-files -v -- \"$@\"| grep -E '^(S|[[:lower:]])' # S means update-index --skip-worktree, and lower first letter means --assume-unchanged."
注释和结尾" 是要复制到您的.gitconfig 的行的一部分。
用法:
git ignore file1 file2 file3
【讨论】:
git check-ignore使用git check-ignore command 调试您的 gitignore 文件(排除文件)。
例如:
$ git check-ignore -v config.php
.gitignore:2:src config.php
关于每个给定路径名(包括行)的匹配模式(如果有)的上述输出详细信息。
所以也许你的文件扩展名没有被忽略,而是整个目录。
返回格式为:
<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>
或使用以下命令在用户主目录和存储库文件夹中打印您的.gitignore:
cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude
或者使用git add -f,它允许添加其他被忽略的文件。
有关详细信息,请参阅:man gitignore、man git-check-ignore。
git check-ignore [options] 路径名...
git check-ignore [选项] --stdin
【讨论】:
# Git is ignoring files that aren't in gitignore,后跟此答案的 URL。
看看这些:
您是否查找过其他 .gitignore 文件,因为它们可能很多。
另外,查看 REPO/.git/config 看看是否有任何内容。
Repo exclude 可以将本地 per-repo 规则添加到 repo 中的 .git/info/exclude 文件中。这些规则未与 repo 一起提交,因此不会与其他人共享。此方法可用于您不希望其他用户生成的本地生成文件,例如由您的编辑器创建的文件。
【讨论】:
还有一件事:如果您所在的目录需要 root 访问权限才能写入或执行,请确保您是 root 用户。实际上,我在尝试添加子模块时遇到了一个奇怪的错误,而 git 一直抱怨我克隆到的路径被 git 忽略文件忽略了。然后我换成root用户,再次运行submodule add,就没有问题了。
【讨论】:
对我来说,我的 ~/.gitignore_global 文件中不小心有一个通配符。可以去那里看看吗?
【讨论】:
在我的情况下,是我路径中的正斜杠导致了问题...
不工作
/srv/bootstrap/
工作
srv/bootstrap/
【讨论】:
确保.gitignore 文件没有忽略自身。
一个常见的错误是将* 规则添加到.gitignore 文件以忽略当前文件夹中的每个文件。
解决这个问题的方法是给.gitignore添加一个异常:
*
!.gitignore
这样,目录中的所有文件都将被忽略,.gitignore 除外。
【讨论】:
检查您对该文件夹的权限。我刚刚遇到这个问题,这是因为该文件夹归 www-data 用户所有,而不是我登录到终端的用户。
【讨论】:
还请检查~/.gitignore 和~/.gitignore_global,它们可能由某些 Git 客户端(例如 Mac OS X 上的 Atlassian SourceTree)创建。
【讨论】:
从 git 收到此错误消息的另一个原因是在执行 git submodule add 命令时,前一个 git 命令已崩溃并离开锁定文件(例如,当您使用包含 git 命令和你没有注意到崩溃)。
如果您改为执行命令 git commit,而条件都没有改变(git submodule add 会一直喊你的.gitignore 文件是罪魁祸首),你会看到另一个改为错误报告:
$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
确实删除了锁定文件:
rm .git/index.lock
解决了这个问题。 (这发生在 git 版本 2.1.0.9736。它可能会在未来的 git 版本中修复。)
【讨论】:
要尝试的另一件事:我有一个目录 B,它自己的 .git 存储库嵌套在我的项目目录 A 下(但不是作为子模块)。我对 B 进行了一些更改,并希望将其变成一个真正的子模块。我相信 git A 会自动忽略 B,因为它包含自己的存储库(请参阅Nested git repositories without submodules?)。我重命名了 B 文件夹,并尝试将其再次克隆为子模块,这给我带来了误导性的“被 .gitignore 忽略”错误消息。解决方案是从 B 中删除 .git。
【讨论】:
最好知道你的 git 配置可以包含 core.excludesfile,它是一个文件的路径,其中包含被忽略的其他模式。您可以通过运行(在有问题的 git repo 中)来了解您是否有这样的配置:
git config core.excludesfile
如果它打印文件路径,请查看该文件的内容以获取更多信息。
在我的情况下,我通过旧版本的 boxen 安装了 git,它忽略了模式“图标?”就我而言,这给了我这个问题中提到的文件夹图标的警告(我在一个不区分大小写的文件系统上,这就是为什么 Icon? 匹配图标)。
【讨论】:
Icon? 被忽略。
我遇到了同样的问题 - git 忽略了一个目录并出现此错误:
➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added
我终于发现我的问题是我的~/.gitignore_global中的一行:
TAGS
与路径 app/views/admin/tags 匹配。我通过在全局 gitignore 文件中添加前导斜杠来修复它
/TAGS
然后 git 又开始跟踪我的目录了。
【讨论】:
help 被忽略的目录。幸运的是,我很快就找到了你的答案。
我遇到了和你一样的问题。你得到的唯一回复列出了几个要检查的地方,但没有一个能为我解决问题,而且从你的评论中我也不认为你适合。我没有其他 .gitignore 文件隐藏在目录树的下方; .git/config 中没有任何内容; .git/ingore/exclude 中没有任何内容
如果仍有问题,请查看this answer。它为我解决了这个问题
基本上,检查 ~/.gitignore 文件。我的被称为 ~/.gitignore_global。我不知道它是什么时候创建的(我肯定没有成功),但是我在第一次安装时尝试了很多不同的 git setup,所以其中一个肯定是把它放在那里的。
希望他的回答也能帮助到你!
【讨论】: