Reputation: 69
I am a part of a Game Development Team. We are developing an Unreal Engine 4 game for PC. We have a private GitLab Server handling version control of the project.
Right now, when anyone tries to Git Pull from a specific branch of our Git Project, they receive a 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
We had the Developer that created this branch remove Bucket_A.uasset
and repush the change. When anyone tries to Git Pull now, they receive a Smudge Error with a different file:
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
So this isn't some isolated incident: it looks like there could be Smudge Errors for multiple files. The really aggravating part is that the Smudge Error only shows up at around 99% of the Git Pull, so going through and deleting the file with a Smudge Error (whatever it is) manually after an hour or two attempting a Git Pull, and then Repushing the change, is proving to be a huge chore and will certainly cause problems with the Unreal Engine Project itself (since Textures will now be missing).
Unreal Engine is reporting no issue for either of these UASSET files, which tells me there is nothing wrong with the content of these files.
To Git Pull the project, we have Team Member using SourceTree and Windows Command Line. They're all receiving this same error.
What is a Smudge Error, and are there any recommendations for dealing with these so we can get this Git Branch to Pull successfully? Is this an issue that needs to be resolved by individual Pullers, the Pusher and/or the Git Server Host?
Upvotes: 5
Views: 17958
Reputation: 69
So I resolved the issue: we ended up rolling back our GitLab VM to a time prior to a Git Push that had caused the GitLab VM to lock up (it took several attempts before the Git Branch was pushed at that time). After rolling back the GitLab VM, I added more RAM and CPU to the VM: the Git Branch was pushed again and this time without the GitLab VM locking up. Once successfully pushed, the branch could be pulled without error! So we no longer receive Smudge Error
s when pulling the branch (or any other branch in the Git Project for that matter, as I'll explain further).
We believe that ever since that event of the GitLab VM locking up during a Git Push, the Project Git Repository was corrupted. Indeed, anyone pulling from any of our Project Branches (minus master for some reason) were receiving Smudge Error
s, including from previous branches that were pullable without error before! I am very thankful that regular snapshots and backups are performed on our Git Server.
Word of warning to anyone hosting a Git Server: if a big push is about to be attempted, snapshot AND backup the Git Server first. Trust me, you REALLY don't want a corrupted Git repository!
Upvotes: 2
Reputation: 76744
Git LFS uses a smudge and clean filter to turn the pointer files in the repository into the large files that you checked in. The smudge process is this process.
The message you're seeing is because Git LFS is trying to download the object from the server and its hash is incorrect. Git LFS uses SHA-256 to identify files and the file it's receiving is the empty file (of which e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
is the hash), not the file you intended. This is a problem in your server; it's not a problem with Git or Git LFS.
If you try to upload the object again, GitLab will probably think that it already has the object and not request that it be uploaded. You will need to tell GitLab to delete the existing object, however that is done, and then push the object again from a client that has it.
If you're seeing a large number of files with this problem, your GitLab instance may have a serious problem. Truncated, zero-length files are a common problem when a machine crashes, and you should inspect your GitLab instance for any problems. If you're unsure how to do that, you should contact GitLab for support.
Upvotes: 1