我在.gitignore中添加了以下一行:

sites/default/settings.php

但是当我输入git状态时,它显示文件为unstaging文件。

有什么问题吗?所有其他模式都很好。


当前回答

有一件事我认为在这里的优秀答案中被忽略了,那就是另一个。gitignore或多个。

在某种情况下,我克隆了一个repo,不知道为什么在运行git add时再次添加了一个“被忽略”的文件。结果是在子文件夹中有另一个.gitignore,并且覆盖了根文件夹中的文件。

/.gitignore
/some-folder/.gitignore
/some-folder/this-file-keeps-getting-staged

The

根 /.gitignore

忽略这个文件一直在上演吗

The

一些文件/ .gitignore

没有规范来忽略“this-file-keeps-getting- staging”文件。

这就是问题所在。

其中一种方法是在层次结构中搜索多个.gitignore文件。找出适用的规则。

其他回答

我遇到了这个问题,这是一个老问题了,但是我想要跟踪那个文件但不是在某些工作副本上跟踪它,你可以这样做

git update-index --assume-unchanged sites/default/settings.php

.gitignore将只忽略你还没有添加到存储库的文件。

如果你做了git add .,文件被添加到索引中,.gitignore不会帮助你。你需要执行git rm sites/default/settings.php来删除它,然后它就会被忽略。

我刚刚尝试了git 1.7.3.1,并给出了这样的结构:

repo/.git/
repo/.gitignore
repo/sites/default/settings.php

其中repo因此是上面提到的“根”(我将它称为你的工作树的根),而.gitignore只包含sites/default/settings.php,忽略为我工作(无论.gitignore是否被添加到repo)。这与你的回购布局匹配吗?如果不是,有什么不同?

有一些实例,例如应用程序配置文件,我想在git中跟踪(因此.gitignore将不起作用),但我需要更改本地设置。我不希望git管理这些文件或将其显示为修改。要做到这一点,我使用skip-worktree:

git update-index --skip-worktree path/to/file

您可以通过列出文件并检查以S开头的行是否被跳过来确认文件被跳过

git ls-files -v | grep ^S

如果将来你想让git再次在本地管理文件,只需运行:

 git update-index --no-skip-worktree path/to/file

上面的麦斯卡利托给出了一个很好的答案,引导我走上了正确的道路,但是

Git update-index——assume-unchanged file/to/ignore.php

与git有一个合同,其中:用户承诺不更改文件,并允许git假设工作树文件与索引中记录的文件匹配。

然而,我改变了文件的内容,所以在我的例子中——skip-worktree是更好的选择。

Toshiharu Nishina的网站提供了一个关于skip-worktree和假设不变的很好的解释:忽略已经在Git本地管理的文件

另一个可能的原因是同时运行了几个git客户端实例。例如“git shell”+“GitHub Desktop”等。


这发生在我身上,我使用“GitHub Desktop”作为主要客户端,它忽略了一些新的。gitignore设置:

你做出了承诺。 接下来,提交:它忽略.gitignore设置。提交包含了.gitignore中提到的大量临时文件。 清除git缓存;检查.gitignore是否是UTF8;删除文件->提交->移动文件回来;跳过承诺——没有任何帮助。

原因:Visual Studio Code编辑器在后台使用相同的已打开存储库运行。VS Code有内置的git控件,这会产生一些冲突。

解决方案:仔细检查多个隐藏的git客户端,一次只使用一个git客户端,特别是在清理git缓存时。