我有一个使用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文件,并拒绝任何失败的提交。您可以查看手册页面了解更多详细信息。