涂抹错误:涂抹过滤器LFS在Git拉取期间失败

涂抹错误:涂抹过滤器LFS在Git拉取期间失败,git,atlassian-sourcetree,unreal-engine4,pull,git-lfs,Git,Atlassian Sourcetree,Unreal Engine4,Pull,Git Lfs,我是游戏开发团队的一员。我们正在为PC开发一款游戏。我们有一个专用服务器,负责项目的版本控制 现在,当任何人试图从我们的Git项目的特定分支进行Git Pull时,他们会收到一个污点错误: Downloading UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_A.uasset (1.3 MB) Error downloading object: UE4Proj/Content/Game/Art/Arch

我是游戏开发团队的一员。我们正在为PC开发一款游戏。我们有一个专用服务器,负责项目的版本控制

现在,当任何人试图从我们的Git项目的特定分支进行Git Pull时,他们会收到一个污点错误:

Downloading UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_A.uasset (1.3 MB)
Error downloading object: UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_A.uasset (c366451): Smudge error: Error downloading Ue4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_A.uasset (c366451e360519497bf1719bacdc40c938c833adf9b8060d90d0829fec15d6c8): expected OID c366451e360519497bf1719bacdc40c938c833adf9b8060d90d0829fec15d6c8, got e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 after 0 bytes written

error: external filter 'git-lfs filter-process' failed
fatal: UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_A.uasset: smudge filter lfs failed
我们让创建此分支的开发人员删除
Bucket\u A.uasset
并重新发布更改。当任何人现在尝试Git Pull时,他们会收到一个带有不同文件的污点错误

Downloading UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_C.uasset (1.4 MB)
Error downloading object: UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_C.uasset (4023793): Smudge error: Error downloading UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_C.uasset (40237933795d4ca4b4c58e2884e219c3e4cd8168af176f01b33d71e3353376d7): expected OID 40237933795d4ca4b4c58e2884e219c3e4cd8168af176f01b33d71e3353376d7, got e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 after 0 bytes written

error: external filter 'git-lfs filter-process' failed
fatal: UE4Proj/Content/Game/Art/Architecture/MedievalVillage/Textures/Bucket_C.uasset: smudge filter lfs failed
因此,这不是一个孤立的事件:看起来多个文件可能存在污点错误。真正令人恼火的是,涂抹错误只出现在Git Pull的99%左右,因此在尝试Git Pull一两个小时后,手动检查并删除带有涂抹错误的文件(无论是什么),然后重新拒绝更改,事实证明,这是一项艰巨的任务,肯定会导致虚幻引擎项目本身出现问题(因为纹理现在将丢失)

Unreal Engine报告这些UASSET文件都没有问题,这告诉我这些文件的内容没有问题

为了Git拉动项目,我们让团队成员使用和Windows命令行。他们都收到了同样的错误


什么是污点错误,是否有处理这些错误的建议,以便我们能够成功地拉取这个Git分支?这是一个需要由单个拉取器、推送器和/或Git服务器主机解决的问题吗?

Git LFS使用污迹和干净过滤器将存储库中的指针文件转换为您签入的大文件。涂抹过程就是这个过程

您看到的消息是,Git LFS试图从服务器下载对象,但其哈希不正确。Git LFS使用SHA-256识别文件,它接收的文件是空文件(其中
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
是散列),而不是您想要的文件。这是服务器中的一个问题;Git或Git LFS没有问题

如果您再次尝试上载该对象,GitLab可能会认为它已经拥有该对象,而不会请求上载该对象。您需要告诉GitLab删除现有对象,不管如何,然后从拥有该对象的客户端再次推送该对象


如果您看到大量存在此问题的文件,那么您的GitLab实例可能存在严重问题。当机器崩溃时,被截断的零长度文件是一个常见问题,您应该检查GitLab实例是否存在任何问题。如果您不确定如何操作,应该联系GitLab寻求支持。

因此我解决了问题:我们最终将GitLab VM回滚到Git推送之前的某个时间,该时间导致GitLab VM锁定(在推送Git分支之前进行了多次尝试)。在回滚GitLab虚拟机之后,我向虚拟机添加了更多的RAM和CPU:Git分支再次被推送,这次没有GitLab虚拟机锁定。成功推送后,可以毫无错误地拉出分支!因此,在拉分支(或者Git项目中的任何其他分支,我将进一步解释)时,我们不再收到
Smudge Error
s

我们相信,自从GitLab VM在Git推送过程中被锁定以来,Git项目存储库就已经损坏。事实上,任何人从我们的项目分支中的任何分支(由于某种原因减去master)拉取时都收到了
污迹错误
s,包括以前可以无误拉取的分支!我非常感谢在我们的Git服务器上执行常规快照和备份


警告任何托管Git服务器的人:如果要尝试大推送,请先快照并备份Git服务器。相信我,你真的不想要一个损坏的Git存储库

你确定这是我们服务器的问题,而不是Git推送的问题吗?这似乎是我们的首席程序员现在的想法。是否有一种方法可以使用Git从分支中删除特定文件(GitLab不允许在Web GUI中删除LFS文件)并重新发布它们?还是需要删除整个分支,并重新发布整个分支?这是一个很大的分支。你的服务器应该检查上传的对象的大小,如果对象的大小不正确,即使它没有检查散列,也不接受该对象,因此如果它不这样做,你的服务器就坏了。Git LFS上载协议旨在执行验证操作,服务器可以在其中验证上载的对象。不过,它没有提供删除对象的方法。我不能为GitLab做什么或不做什么说话;我不熟悉它,所以你必须问他们。我相信你是对的,它确实是服务器,或者可能是整个项目存储库:主分支很好,但是当任何人尝试从任何其他分支提取时,他们会收到“涂抹错误”。我不知道我需要做什么来解决问题。你有什么推荐的Git或Git LFS社区我可以求助吗?我很担心我需要更多的关注GitLab社区。你可以在网上提问。这不是一个问题,因此将其作为一个问题公开不是正确的做法。我会告诉你,在Git LFS项目中,熟悉GitLab的人并不多,所以我肯定会先问问GitLab。