270

我将以下行添加到.gitignore

sites/default/settings.php

但是当我键入git status它时,它会将文件显示为未暂存的文件。

有什么问题?所有其他模式都运行良好。

4

14 回答 14

537
于 2010-09-30T18:31:09.493 回答
145

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

git update-index --assume-unchanged sites/default/settings.php
于 2011-08-14T00:27:05.900 回答
63

请使用此命令

git rm -rf --cached .
git add .

有时 .gitignore 文件即使是正确的也不起作用。Git 忽略文件的原因是它们没有添加到存储库中。如果你之前添加了一个你想忽略的文件,它会被 Git 跟踪,任何跳过的匹配规则都会被跳过。Git 这样做是因为该文件已经是存储库的一部分。

于 2020-03-05T18:08:10.507 回答
54

.gitignore 只会忽略您尚未添加到存储库中的文件。

如果您执行了git add .,并且文件已添加到索引中, .gitignore 将无济于事。您需要将git rm sites/default/settings.php其删除,然后它将被忽略。

于 2010-09-30T19:45:32.990 回答
23

我有同样的问题。运行时在其中列出的未跟踪文件中
定义的文件。.gitingoregit status

这是因为.gitignore文件是以UTF-16LE编码保存的,而不是以UTF8编码保存的。

.gitignore将文件的编码更改为UTF8它工作后。

于 2018-01-10T10:54:08.033 回答
7

有一些实例,例如我想在 git 中跟踪的应用程序配置文件(因此 .gitignore 将不起作用),但我需要更改本地设置。我不希望 git 管理这些文件或将它们显示为已修改。为此,我使用跳过工作树:

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 管理的文件

于 2019-04-08T02:25:03.450 回答
4

我做了什么来成功忽略settings.php文件:

  1. git rm --cached 站点/默认/settings.php
  2. 提交(直到这里没有工作)
  3. 手动删除 sites/default/settings.php (这成功了)
  4. 混帐添加。
  5. 提交(成功忽略)

我认为如果 Git 上有已提交的文件,那么忽略不会按预期工作。只需删除文件并提交。之后就会无视。

于 2018-06-29T06:44:52.493 回答
3

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


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

  1. 你提交了一些东西。
  2. 接下来,提交:它忽略 .gitignore 设置。提交包括 .gitignore 中提到的大量临时文件。
  3. 清除 git 缓存;检查 .gitignore 是否为 UTF8;删除文件-> 提交-> 移回文件;跳过 1 次提交——没有任何帮助。

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

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

于 2019-05-23T05:52:58.437 回答
2

确保 .gitignore 没有扩展名!!它不能是 .gitignore.txt,在 Windows 中只需将文件命名为 .gitignore。它会起作用。

于 2017-10-12T18:54:33.857 回答
2

我在 VS Code 终端上尝试了上面的大多数命令,但出现如下错误:

fatal: pathspec '[dir]/[file]' did not match any files

我在 GitHub Desktop 上打开了这个项目,然后从那里忽略了它,它工作了。

于 2019-11-06T20:21:48.933 回答
1

我刚刚用 git 1.7.3.1 尝试了这个,并给出了如下结构:

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

因此,上面提到的“根”在哪里repo(我将其称为工作树的根),并且.gitignore仅包含sites/default/settings.php忽略对我有用(无论是否.gitignore添加到回购中都无关紧要)。这是否符合您的回购布局?如果不是,有什么不同?

于 2010-09-30T19:37:45.840 回答
1

以防万一将来有人遇到和我一样的问题:

如果您使用

*
!/**/
!*.*

删除没有扩展名的二进制文件的技巧,确保所有其他 gitignore 行都在下面。Git 将从顶部读取 .gitignore,因此即使我的 gitignore 中有“test.go”,它也是文件中的第一个,之后变为“未忽略”

!*.*
于 2018-02-13T04:36:32.957 回答
1

我认为这里的优秀答案中遗漏的一件事是,如果another *.gitignore* or multiple of them.

在一个案例中,我克隆了一个 repo,但无法弄清楚为什么在运行git add时再次添加了一个“被忽略的”文件。结果发现子文件夹中有另一个.gitignore并且覆盖了根文件夹中的那个。

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

根 /.gitignore

忽略了这个文件保持上演

/some-folder/.gitignore

没有指定忽略“this-file-keeps-getting-staged”文件。

因此问题。

其中一件事是在层次结构中简单地搜索多个 .gitignore 文件。并找出适用的规则。

于 2020-09-22T22:47:05.110 回答
1

一个棘手的问题是,如果您执行类似的操作echo node_modules >> .gitignore,它将无法正常工作。windows终端保存文件UCS-2 LE BOM,git似乎不接受。

您可以打开文件Notepad并使用UTF-8编码保存

记事本保存 utf-8 编码

它现在有效。

我认为他们需要解决这个问题,因为echo "filetoignore" >> .gitignore实际上看起来很方便

于 2021-07-28T13:36:48.730 回答