git update-index --assume-unchanged返回“致命无法标记文件”

时间:2012-10-16 17:56:26

标签: git

我遇到与此帖相同的问题 - git update-index --assume-unchanged returns error 但我不明白答案标记为正确(我不认为它解释了如何解决这个问题)

我这样做并收到此错误:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. 文件IS已添加到存储库
  2. 它不在.git / info / exclude
  3. 它不在.gitignore(它是,但我拿出来,然后强迫 web.config将使用git add -f web.config添加,提交和 把这些变化推到了回购中)
  4. 当我做git ls-files -o它不存在
  5. 那我该怎么做才能解决?

19 个答案:

答案 0 :(得分:92)

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

我认为也许这是一个bug,并下载了最新版本的git,但这没有帮助。

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

请注意,这是使用Git for Windows,因此您的结果可能会因其他平台而异。

答案 1 :(得分:45)

我在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

答案 2 :(得分:14)

在我的情况下,我标记的树是一个目录,而不是像你的情况那样的文件,我在它的名字后面缺少正斜杠。

不正确 -

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

正确 -

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

注意 最后的正斜杠(/)。

答案 3 :(得分:6)

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

你能做的是:

  1. 移动到本地存在的正确路径(在GITBASH中)
  2. 更新索引$git update-index --assume-unchanged <file name>
  3. 这对我有帮助! :)

答案 4 :(得分:4)

确保文件已添加到git repo中,如果没有在git repo中添加文件,那么尝试它将起作用。

答案 5 :(得分:4)

当我试图解开* .orig文件时,我遇到了这个问题。

这就是我要解决的问题:

$git reset -- *.orig

如果这不起作用:

$git clean -fd

答案 6 :(得分:3)

如果您的路径有空格,即使您拥有正确的套管,也可能会出现此错误。

这会导致“致命”错误:

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

要解决此问题,只需在路径周围添加引号即可。

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

答案 7 :(得分:3)

--assume-unchanged是关于慢速文件系统的,并且用户承诺Git不需要检查此文件,因为Git可以假设它不变。但是一些命令仍然会检查并产生惊喜&#39;!

请勿在更改的文件上使用。

很抱歉成为该新闻的主播(我正在修改该文档的补丁)。

答案 8 :(得分:3)

我的问题是,我尝试使用*通配符假设它是递归的,但它不是。

所以我做的是

$ 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/*

然后为我工作,并没有导致OP和我的问题。

答案 9 :(得分:2)

确保已签入“web.config”。

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

答案 10 :(得分:1)

对某人有用。 我有同样的问题,没有语法问题,没有空格的名称,没有路径问题,并且git reset命令不起作用。我是从apache www里面的一个文件夹提交的,apache服务已经停止了。再次启动apache服务,错误消失

答案 11 :(得分:1)

使用此命令的一个常见错误是试图假设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字符代表跳过的文件。

答案 12 :(得分:1)

所以我在使用它时遇到了同样的错误:

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

所以我改成

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

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

就我而言,我尝试使用上述任何一种方法,但没有运气。

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

<?php

$num = 312;
$arr_num = array_map('intval', str_split($num));

//steps taken for each sequence will be stored in this array
$steps = array();

//printing number
for($i = 0; $i < count($arr_num); $i++)
    echo $arr_num[$i];


//calculation
for($i = 0; $i < count($arr_num); $i++) {
    $count = 0;

    for($j = 0; $j < count($arr_num); $j++) {

        if($arr_num[$i] == $arr_num[$j])
            ++$j;

        elseif($arr_num[$i] > $arr_num[$j]) {

            while($arr_num[$j] != $arr[$i]) {
                $arr_num[$j] += 1;
                $count++;
            }
        }

        else {
            while($arr_num[$j] != $arr_num[$i]) {
                $arr_num[$j] -= 1;
                $count++;
            }
        }
    }
    //pushing the count to steps array for each sequence
    array_push($steps, $count);

}
//I am stuck here...can't find the further solution
?>

Git拒绝了此操作,但他建议我强行执行。

git add myfile.php

那对我有用。

答案 16 :(得分:0)

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

答案 17 :(得分:0)

我在Windows中遇到了与Cygwin相同的问题。提供完整的文件路径

答案 18 :(得分:0)

遇到相同的问题,其他任何方法都无效(跟踪了我的文件,而不是gitignore)。我意识到我从终端输出的上面几行复制了文件名,这使得它在文件名之后复制了空白。即使看起来没有空间,但最后我还是有很多空间。因此,仅复制文件路径并将其保留在双qoutes中,这很有帮助。 我也首先做了git reset HEAD

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