git-lfs无法丢弃文件更改(遇到的文件本应是指针)

  • 本文关键字:文件 指针 遇到 git-lfs git git-lfs
  • 更新时间 :
  • 英文 :


我有一个使用git-lfs的文件,但即使我不做任何事情,它也只是在git上显示为有更改。无论是通过VS代码UI、git重置还是git还原,我都无法放弃这些更改。

Git一直告诉我";遇到1个本应是指针但不是的文件:";

我知道Git上的线程错误:遇到了7个本应是指针的文件,但不是';t、 但我已经尝试了所有的解决方案,但都无济于事。

这是Git的一个限制,因为有人在不使用Git LFS的情况下提交了一个由Git LFS跟踪的文件。Git常见问题解答简要提到了这一点。

发生这种情况的原因是,当一个文件在工作树中被标记为已修改时,Git会通过干净过滤器(即Git LFS(来运行它,以查看它是否已经更改。当这种情况发生时,Git LFS会将其变成一个指针文件,但索引中的文件是一个完整的Git文件,因此它被标记为已修改。尝试使用git reset --hard不会改变事情,因为Git仍然将其写入树中,并要求Git LFS以相同的方式清理它,所以没有任何变化。

Git LFS无法控制这种行为,也无法检测到它,因为Git没有提供一种方法来指示用户是否正在运行git reset --hard。对于干净的工作树,您需要运行git add --renormalize .并提交。在此之后,该文件将被转换为LFS文件,并且这种情况不会再次发生。请注意,进行此更改的提交必须出现在每个受影响的分支上才能修复它

如果您设置了CI,您可以使用Git LFS 3.0.1或更高版本运行git lfs fsck --pointers来检查所有文件是否都是正确的LFS文件,并拒绝任何失败的提交。您可以查看手册页面了解更多详细信息。

最新更新