Git错误:遇到应该是指针的7个文件,但没有

问题描述 投票:19回答:5

如果标记为已修改的暂存文件,如何清理repo

git reset --hard

我明白了

遇到了应该是指针的7个文件,但不是:

git clean -fdx

也没有帮助

git git-lfs
5个回答
19
投票

我对git-LFS和solved it the same way I've solved a linending induced borked index 存储的一些文件有这个确切的错误。

清除缓存并执行硬重置:

git rm --cached -r .
git reset --hard

由于我的仓库中存在巨大的git-LFS文件,因此这对我来说明显快于新鲜克隆。


17
投票

像Travis Heeter在他的回答中提到的那样,尝试以下命令序列:

git lfs uninstall

git reset --hard

git lfs install

git lfs pull

如果这不起作用(因为这对我不起作用),以下黑客可能有效:

请尝试以下命令:

git rm --cached -r .

git reset --hard

git rm .gitattributes

git reset .

git checkout .

这对我有用!


4
投票

当您执行包含应该由.gitattributes中指定的LFS跟踪的文件的结帐时,可能会发生这种情况,但不知何故,它们已被直接提交。很可能你有另一个程序来管理你的存储库,比如git GUI或IDE。

这可能令人沮丧,因为这些文件无处不在,并阻止您进行结帐。一旦你收起你的更改,他们就会回来!如果您遇到这种情况,快速解决方法是在临时分支上提交这些更改,以便您可以再次签出。

要真正解决此问题,请确保已将文件作为LFS指针提交。这应该像使用git add一样简单。在提交之前使用git lfs status检查您的工作。 git lfs ls-files将显示LFS正在管理的文件。

git lfs status具有误导性,因为当它真正列出所有变化时它会读取Git LFS objects to be committed。您期望由LFS跟踪的文件应该读取类似(LFS: c9e4f4a)(Git: c9e4f4a -> LFS: c9e4f4a)而不是(Git: c9e4f4a)的内容。

举例来说,我发现这是一个问题,当通过Xcode 9.2添加图像资源时,我添加了自动添加的“CalendarChecked.png”。

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

    new file:   Example/Assets.xcassets/CalendarChecked.imageset/CalendarChecked.png

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Example/Assets.xcassets/CalendarChecked.imageset/CalendarChecked.png

$ git lfs status

Git LFS objects to be committed:

    Example/Assets.xcassets/CalendarChecked.imageset/CalendarChecked.png (Git: c9e4f4a)

Git LFS objects not staged for commit:

    Example/Assets.xcassets/CalendarChecked.imageset/CalendarChecked.png (File: c9e4f4a)

$ git add Example/Assets.xcassets/CalendarChecked.imageset/CalendarChecked.png`
$ git lfs status

Git LFS objects to be committed:

    Empty/Empty/Assets.xcassets/CalendarChecked.imageset/CalendarChecked.png (LFS: c9e4f4a)

Git LFS objects not staged for commit:

$

3
投票

这些解决方案都不适合我,但我拼凑了几个来源,最终解决了所有这些问题。

  1. 推送您不想丢失的任何更改 确保你在主分支中,并且所有内容都已提交(坏文件除外)。
  2. 停止一切 SourceTree,任何服务器,文件浏览器和浏览器。如果在其他地方使用它,有时这些东西将不起作用。如果有疑问,请停止 - 有了这个,最好是矫枉过正。 如果您完成所有这些并且您的更改没有发生变化,请考虑重新启动计算机,强制停止任何可能影响您的回购并再次尝试的TaskManager中的任何内容。
  3. 打开命令窗口(或终端) 在Windows上,这将是一个cmd或命令窗口。如果您不确定,请单击Windows键,然后键入cmd。它会建议命令提示符,单击它。 cd到你的回购。
  4. 卸载lfs > git lfs uninstall 然后它会说: Hooks for this repository have been removed. Global Git LFS configuration has been removed.
  5. 重启 > git reset --hard 它会经历很多输出......
  6. 重新安装lfs > git lfs install 这可能再说它发现应该是指针但不是指针的文件。那没关系,继续吧!
  7. lfs> git lfs pull 希望用lfs拉动将覆盖被borked的文件。 我的一些消息来源说,此时他们的回购再次运作,但不是我本人。您可以打开SourceTree来检查是否需要,但如果它不起作用,您可能必须从顶部开始。
  8. 迁移 这里的核心问题是lfs通过用指针替换它们来跟踪大文件。如果您是程序员,这类似于变量指向内存中的某个位置,而不是保持实际值。 到目前为止我们所做的是 卸载lfs 删除一切 重新安装lfs 拉一切 所以现在我们在文件夹中有所有这些东西,无论是文件还是文件指针,lfs需要弄清楚是否有任何文件应该是指针而反之亦然(这里是我们可怕错误的来源 - 有些文件应该是指针,但不是)。因此,我们将执行migrate来启动通过repo上的文件的过程,如果它们大于1Mb,则lfs将用指针替换它们。 git lfs migrate
  9. 更恐怖 这是其他人停下来说他们再次工作的一点,但不是我。我收到一个错误: git rev-list出错...退出状态128致命:错误修订'... v1.0.0' 有一个悲剧英雄@guneyozsan在一个github help page上,尽管它没有解决他的问题,但最后一篇文章已经发布了。他在我开始寻找第一个如何解决这个问题的时间之前大约2个小时发布了它,即使这个问题已经存在了2年。祝福你@guneyozsan,祝你好运解决问题。 > git lfs migrate info --include-ref=v1.0.0 请注意,该版本与错误的版本匹配 - v1.0.0。 我没有找到关于为什么会出现此错误的消息来源,但我的猜测是migrate在本地存储库上生成的lfs版本号与源版本不匹配。无论出于何种原因,本地lfs数据被搞砸了(对我来说,所有这一切都是在SourceTree在推送过程中崩溃并且我强制重启机器时可能已经损坏了lfs数据),当发生这种情况时,SourceTree不会知道如何处理它,所以它只是陷入它试图更新的循环中,但它无法读取损坏的数据。因此冗长的故障排除。
  10. 藏匿和拉动 当您打开SourceTree时,您可能会看到它想要添加所有文件。不要那样做。藏匿,然后拉。 繁荣,恐怖已经结束。希望。如果没有,这个git hub pagethis one可能会帮助你更多,但这对我有用。

0
投票

确保安装了git lfs 2.5或更高版本(download here)。

检查您使用的是您下载的git lfs版本(2.7.7对我来说):

>git lfs version
git-lfs/2.7.2

跑:

git lfs migrate import --fixup --everything

拉你的分支并修复任何合并冲突。

发现在这个github comment


0
投票

当这显然是一个无处不在的错误时,这就是我们在团队中所做的事情:

  1. 禁用该特定类型文件的lfs(修改.gitattributes或通过SourceTree菜单)
  2. 更改将消失,您将看到.gitattributes的更改
  3. 删除问题: 3.1一种解决方案是执行git reset --hard。另一种方式,放弃改变。有时文件不会再出现。 3.2.1如果以前的解决方案不起作用,请重复1和2.然后确保您在(A)中的此分支已经提交并推送除了那些烦人文件之外的所有内容。然后提交您的更改,但不要推送。 3.2.2:去另一个分支(B) 3.2.3:删除执行.gitattributes提交的本地分支(A),即使它表示存在未被推送的提交,也会强制删除。它将忘记提交(之后可以通过GC或其他任何方式删除它,但如果错误的文件不是很大的话,它不是什么大问题) 3.2.4:再次检查分支A.它将下载存储库的先前状态,而不会设置烦人的文件和LFS设置正确的方法。

这总是有效的!

© www.soinside.com 2019 - 2024. All rights reserved.