【问题标题】:Smudge Error: Smudge Filter LFS Failed during Git Pull涂抹错误:涂抹过滤器 LFS 在 Git 拉取期间失败
【发布时间】:2020-12-07 13:26:00
【问题描述】:

我是游戏开发团队的一员。我们正在为 PC 开发一个Unreal Engine 4 游戏。我们有一个私有的GitLab 服务器处理项目的版本控制。

现在,当任何人尝试从我们 Git 项目的特定分支进行 Git Pull 时,他们会收到 Smudge Error

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_A.uasset 并重新推送更改。当任何人现在尝试 Git Pull 时,他们会收到带有不同文件的 Smudge Error

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,然后重新推送更改,这被证明是一项繁重的工作,并且肯定会导致虚幻引擎项目本身出现问题(因为现在将丢失纹理)。

虚幻引擎报告这些 UASSET 文件中的任何一个都没有问题,这告诉我这些文件的内容没有任何问题。

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

什么是涂抹错误,有什么建议可以解决这些问题,以便我们可以让这个 Git 分支成功拉取吗?这是一个需要由单独的 Pullers、Pusher 和/或 Git 服务器主机解决的问题吗?

【问题讨论】:

    标签: git atlassian-sourcetree unreal-engine4 pull git-lfs


    【解决方案1】:

    Git LFS 使用 smudge and clean 过滤器将存储库中的指针文件变成你签入的大文件。smudge 过程就是这个过程。

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

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

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

    【讨论】:

    • 您确定这是我们服务器的问题,而不是已完成的 Git 推送问题吗?这似乎是我们的首席程序员现在的想法。有没有办法使用 Git 从分支中删除特定文件(GitLab 不允许在 Web GUI 中删除 LFS 文件)并重新推送它们?还是需要删除整个分支并重新推送整个分支?这是一个很大的分支。
    • 您的服务器应该检查上传的对象的大小,如果大小不合适,则不接受该对象,即使它不检查哈希,所以如果没有,您的服务器就会损坏不要那样做。 Git LFS 上传协议旨在执行验证操作,服务器可以验证上传的对象。但是,它没有提供删除对象的方法。我不能代表 GitLab 做什么或不做什么。我不熟悉,所以你得问问他们。
    • 我相信你是正确的,它确实是服务器,或者可能是整个项目存储库:主分支很好,但是当任何人尝试从任何其他分支中提取时,他们会收到“涂抹错误” .我不知道我需要做什么来解决问题。你有什么推荐的 Git 或 Git LFS 社区我可以求助吗?我很担心我需要转向更多,而不仅仅是 GitLab 社区。​​span>
    • 您可以在Git LFS GitHub Discussions board 上提问。这不是问题,因此将其作为问题打开不是正确的做法。我会告诉你,在 Git LFS 项目上熟悉 GitLab 的人并不多,所以我肯定会先询问 GitLab。
    【解决方案2】:

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

    我们认为,自从 GitLab 虚拟机在 Git 推送期间锁定事件以来,项目 Git 存储库已损坏。事实上,任何人从我们的任何项目分支(由于某种原因减去ma​​ster)都收到了Smudge Errors,包括来自以前的分支之前可以毫无错误地拉动!我非常感谢在我们的 Git 服务器上执行定期快照和备份。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 2011-10-20
      • 2011-04-29
      相关资源
      最近更新 更多