麻烦解除暂存、删除甚至取消跟踪文件的问题。

5

我最近克隆了一个私有仓库,发现它已经有一个处于状态 deleted 的暂存文件:

执行 git status 命令会得到如下结果:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    rootfolder/site/templates/article.php

我想让这个工作目录保持干净,但当我取消暂存、取消跟踪甚至删除时,会出现以下类似错误的问题:

git -c diff.mnemonicprefix=false -c core.quotepath=false reset -q HEAD -- "rootfolder/site/templates/article.php "

error: Invalid path 'rootfolder/site/templates/article.php ' fatal: make_cache_entry failed for path 'rootfolder/site/templates/article.php '

请问如何解决这个问题?谢谢。

1
尝试执行 git checkout rootfolder/site/templates/article.php - Yam Marcovic
2
一个新的克隆怎么可能有任何暂存内容呢?暂存是本地的,而克隆是与远程仓库一起工作的。 - choroba
@choroba,是啊,这也让我感到惊讶!这是我第一次遇到这种情况,但当我第一次克隆它时,确实有一个分阶段被删除的文件。 - EugeneSantos
你确定在克隆存储库之前目录不存在吗? - choroba
2
如果您使用Windows或其他不区分大小写的操作系统,则可能在存储库中存在两个文件:rootfolder/site/templates/article.php和rootfolder/site/templates/Article.php。在检出时,一个文件将覆盖另一个文件,这就是您看到它被删除的原因。我认为除了使用区分大小写路径的操作系统外,没有其他解决方案。 - matt
显示剩余2条评论
1个回答

1
对我来说,这是一个Windows / Linux的问题。我的travis构建(在Linux虚拟机上)运行了一些测试代码,在C:/SomeFolder/someTestResult.file中创建文件。然后它继续提交这些更改并将其推送到Github的C:/文件夹中。
当我尝试在Windows机器上进行git clone时出现了问题。
$ git clone git@github.com:awesome/somegitrepo.git
Cloning into 'somegitrepo'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 940 (delta 5), reused 13 (delta 5), pack-reused 926
Receiving objects: 100% (940/940), 500.23 KiB | 364.00 KiB/s, done.
Resolving deltas: 100% (373/373), done.
error: Invalid path 'C:/SomeFolder/someTestResult.file'


很明显由于 C:/ 文件夹的原因出了问题。Windows 上的 GIT 将 C:/ 视为根目录,而不是本地目录,因此 Linux 本地的 someTestResult.file 在 Windows git 存储库中并不存在。我猜它随后假定它已被删除并暂存删除,即使在我进行任何更改之前。
我的解决方案是打开Linux终端(WSL),并从仓库中删除文件,然后推送以清理远程存储库。
因此,基本上(在WSL中):
$ git clone git@github.com:awesome/somegitrepo.git
$ rm -rf C:/
$ git add .
$ git commit -m 'Removed residue test files'
$ git push

我还修改了我的测试,不再生成奇怪的目录,并将生成的测试文件放在 .gitignore 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接