Git update-index ——扁平化返回“无法标记文件的致命错误”

我有同样的问题作为对 这个后的 OP,但我不明白的答案标记为正确的(我没有看到它解释了如何修复这种情况)

我这样做,得到这个错误:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. 文件已添加到存储库中

  2. 它不是在 .git/info/exclude

  3. 它不是在 .gitignore(它是,但我把它出来,然后强制 要使用 git add -f web.config添加的 web.config、提交的和 将这些变化推给回购协议

  4. 当我做 Git ls-files-o 它不在那里

那么我能做些什么来弥补呢?

66355 次浏览

我和你一样遇到了同样的问题,我遵循了你上面提到的四个步骤,得到了同样的结果。这包括我的文件在执行 git ls-files -o时被列出的事实。但是在我的例子中,我还尝试对执行 ls-files -o时未列出的文件执行 git update-index --assume-unchanged,并且仍然收到相同的错误“ fatal: Unable to mark file”。

我认为这可能是一个错误,并下载了最新版本的 git,但这没有帮助。

我最后意识到的是,此命令区分大小写! 包括完整路径和文件名。在更新到目录的路径以便使用适当的大小写指定完整路径之后,命令执行正确。

请注意,这是在 Git for Windows 中实现的,因此您的结果可能因其他平台而异。

如果路径有空格,即使大小写正确,也可能会得到这个错误。

这导致了“致命”错误:

git update-index --assume-unchanged code/Solution Files/WebEssentials-Settings-json

要修复它,只需在路径周围添加引号。

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"

我在 Mac 上也遇到了同样的问题。大小写敏感性对我来说不是问题——问题是我需要先重新设置我的 Git:

问题:

 git update-index --assume-unchanged index.php
fatal: Unable to mark file index.php

解决方案:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php

我的问题是,我用 * 通配符尝试了这个命令,假设它是递归的,但它不是。

所以我做的是

$ git reset HEAD
Unstaged changes after reset:
M   .gradle/1.9/taskArtifacts/cache.properties.lock
M   .gradle/1.9/taskArtifacts/fileHashes.bin
M   .gradle/1.9/taskArtifacts/fileSnapshots.bin
M   .gradle/1.9/taskArtifacts/outputFileStates.bin
M   .gradle/1.9/taskArtifacts/taskArtifacts.bin

执行

$ git update-index --assume-unchanged .gradle/1.9/taskArtifacts/*

当时为我工作,没有导致任务和我的问题。

--assume-unchanged是关于慢速文件系统的,用户承诺 Git 不需要检查这个文件,因为 Git 可以假定它没有改变。但是一些命令仍然会检查并产生“惊喜”!

不要在更改的文件上使用。

很抱歉带来了这个消息(我有一个修补程序正在修改文档)。

确保您已经签入了“ web.config”。

如果不是,您将收到此错误消息。

我在试图解除对 * . orig 文件的跟踪时遇到了这个问题。

这就是我解除追踪的方法:

$git reset -- *.orig

如果没用的话:

$git clean -fd

无法标记文件 Localization/el-GR. js

你能做的是:

  1. 移动到本地(在 GITBASH 中)文件所在的正确路径
  2. 更新索引 $git update-index --assume-unchanged <file name>

这对我有帮助! :)

确保文件被添加到 git repo,如果没有添加文件在 git repo,然后尝试它将工作。

在我的示例中,我标记的树是一个目录,而不是像您的示例中那样是一个文件,并且在它的名称后面缺少正斜杠。

错误-

git update-index --assume-unchanged directory-name

没错

git update-index --assume-unchanged directory-name/

注意 结尾的正斜杠(/)。

也许对某人有用。 我有同样的问题,没有语法问题,没有名称与空格,没有路径问题,和 git 重置命令不工作。我从 Apache www 里的一个文件夹提交,然后 Apache 服务就停止了。重新启动 apache 服务,错误消失了

对于所有未来的访客。以上都没有解决我的问题。 我意识到的是 .gitignore文件必须放在正确的目录中。在我的例子中,一旦我将 .gitignore移动到应用程序的根目录,问题就解决了。

检查要标记的文件是否存在并正确拼写,尤其是文件路径和文件分隔符。Windows 系统和 Linux 系统的文件分隔符位于不同的方向。

在我的案例中,我尝试使用上面的任何一种方法,但是没有运气。

经过多次尝试,我只是想添加我的文件索引通过。

git add myfile.php

Git 拒绝了这个行动,但是他建议我强制执行。

git add myfile.php -f

这招对我很管用。

我发现有时候这不起作用,因为您已经将文件提交到您的。推或拉。您只需要进行推送,即使在本地修改文件时,您的文件也应该在随后的提交中被忽略。

我对窗口里的 Cygwin 也有同样的问题,给出完整的文件路径

使用此命令的一个常见错误是试图假定 git 已经没有跟踪文件或忽略文件。

首先确保通过运行

git ls-files | grep relative_path/to/file

如果它没有显示您的文件,那么您需要首先添加它:

git add relative_path/to/file

如果这显示了您的文件,或者您已经将该文件添加到 git 中,那么您应该能够正常地运行 git  假定命令:

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

或者文件夹

git update-index --skip-worktree relative_path/to/folder/

您可以检查您的文件是否假定被忽略

git ls-files -v | grep ^S

S 字符表示跳过的文件。

有同样的问题,没有其他工作(我的文件被跟踪,而不是在吉蒂诺尔)。我意识到我从上面几行的终端输出中复制了文件名,这使得它在文件名之后复制了空格。虽然看起来没有空间,但是最后我还是有很多空间。所以只复制文件路径,并将其保存在 double qoutes 中,这很有帮助。 我还先做了 git reset HEAD测试。

git update-index --assume-unchanged "app/src/main/java/com/username/projectName/Utils.kt"

所以当我使用这个时,也出现了同样的错误:

git update-index --assume-unchanged appsettings.Development.json

所以我改成了

git update-index --assume-unchanged appsettings.development.json

实际上我一开始尝试了很多方法,但最终还是使用了这个方法,所以我猜它是区分大小写的

在我的例子中,我得到的是 fatal: Unable to mark file错误,因为我已经把文件推到我的 git repo,所以 git 无法找到它,首先确保你提交和推模板文件,你想保持在 github,但不要跟踪它以后。

一旦推入,现在您就可以运行命令 git update-index --skip-worktree YOUR_FILE并修改它,而不需要跟踪它

Stage 您的文件,只有在那之后运行 --assume-unchanged,然后 下台文件

对我来说,这是因为复制和粘贴,双破折号变成了一个 em 破折号“ー假设-未改变”,而不是这个“ー假设-未改变”。