为什么Git不会忽略我指定的文件?

Nic*_*k.h 158 git

我添加了以下行,.gitignore但是当我键入git status它时,它将文件显示为未停止的文件.有什么问题?所有其他模式运作良好.

.gitignore 文件内容:

sites/default/settings.php
Run Code Online (Sandbox Code Playgroud)

pok*_*oke 297

确保您.gitignore位于工作目录的根目录中,并在该目录中运行git status并从状态输出中复制文件的路径并将其粘贴到.gitignore.

如果这不起作用,那么Git可能已经跟踪了您的文件.您可以通过输出确认git status.如果该文件未列在"未跟踪文件"部分中,则Git已经跟踪该.gitignore文件,它将忽略该文件中的规则.

忽略Git中文件的原因是它们不会被添加到存储库中.如果您之前添加了一个要忽略的文件,那么它将被Git跟踪,并且将跳过与其匹配的忽略规则.Git这样做,因为该文件已经是存储库的一部分.

为了实际忽略该文件,您必须将其删除并将其从存储库中删除.你可以通过使用来做到这一点git rm --cached sites/default/settings.php.这将从存储库中删除文件而不会物理删除文件(这就是它的--cached作用).提交更改后,文件将从存储库中删除,忽略它应该正常工作.

  • 有时您还需要在`git rm --cached`之后执行`git add .`来正确重建索引. (3认同)

Mes*_*ito 93

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

git update-index --assume-unchanged sites/default/settings.php
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是我正在寻找的答案.所有其他答案都假定该文件是使用git add添加的,但情况并非总是如此.使用Acquia Cloud,.gitignore文件应该忽略settings.php(例如),但该文件包含在第一次提交中.解压缩文件,只需将其从存储库中删除,从而将其从实时网站中删除... (4认同)
  • 这个答案引导我找到了我个人需要的 git 功能,这是为了避免跟踪我对存储在远程存储库中的设置文件的本地更改。我最终使用的命令是“git update-index --skip-worktree filename” (3认同)

Exp*_*cer 49

请使用此命令

git rm -rf --cached .
git add .
Run Code Online (Sandbox Code Playgroud)

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

  • 在运行此命令之前,我建议隐藏所有更改的 . 这给我带来了混乱 (16认同)

jon*_*scb 38

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

如果你做了git add .,并且文件被添加到索引中,.gitignore将无法帮助你.您需要git rm sites/default/settings.php删除它,然后它将被忽略.


Flo*_*ris 10

我有同样的问题..gitingore在运行时列为未跟踪文件的文件中定义的文件git status.

原因是.gitignore文件以UTF-16LE编码方式保存,而不是以UTF8编码方式保存.

更改.gitignore文件的编码后,UTF8它为我工作.


Alp*_*glu 7

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

  1. git rm --缓存站点/default/settings.php
  2. 提交(到目前为止还没有工作)
  3. 手动删除sites/default/settings.php(这成功了)
  4. git 添加 .
  5. 提交(成功忽略)

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


J.L*_*upp 7

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

git update-index --skip-worktree path/to/file
Run Code Online (Sandbox Code Playgroud)

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

git ls-files -v | grep ^S
Run Code Online (Sandbox Code Playgroud)

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

 git update-index --no-skip-worktree path/to/file
Run Code Online (Sandbox Code Playgroud)

上面的麦斯卡力陀有一个很好的答案,这使我走上了正确的道路,但是

git update-index --assume-unchanged file/to/ignore.php

与 git 签订合同,其中:用户承诺不更改文件并允许 Git 假设工作树文件与索引中记录的内容相匹配。

但是,我更改了文件的内容,因此在我的情况下 --skip-worktree 是更好的选择。

Toshiharu Nishina 的网站提供了跳过工作树与假设不变的极好解释:忽略已在本地使用 Git 管理的文件


Ole*_*nyi 5

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

\n\n
\n\n

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

\n\n
    \n
  1. 你承诺了一些事情。
  2. \n
  3. 接下来,提交:它会忽略 .gitignore 设置。提交包含 .gitignore 中提到的许多临时文件。
  4. \n
  5. 清除git缓存;检查.gitignore是否为UTF8;删除文件 -> 提交 -> 将文件移回;跳过 1 次提交 \xe2\x80\x93 没有任何帮助。
  6. \n
\n\n

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

\n\n

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

\n