git - merge 后如何在git-lfs中修复Unity .prefab文件

标签 git unity3d github git-lfs

我正在Unity17.2.1中的Unity3D项目上工作
我在Windows 10上将git与Git-LFSSourceTree结合使用
我的问题是:
在我的本地克隆上,一切正常。
但是如果我将项目克隆到新文件夹中(用于测试),则会出现很多错误。它可以通过LFS下载最多的文件tracket,但是我得到了其中的一些文件:

Error downloading object: Assets/VRITM/_Prefabs/SceneGraph/NetworkManager/DebugHUD/ConfigurationPanel/InputField.prefab (3a0c39040b397ab7120d427e019ad767b2bd6b91386856f9730507be1b59ad3c)


我可以以某种方式在本地恢复“复制的”(新克隆的)项目,因为我已经将整个Assets-Folder从我的工作本地克隆导出为unitypackage。
但是这样做之后,git仍然声称它是“最新的”,因此我无法再次提交/推送。
如何修复远程存储库(github)上那些LFS跟踪的文件?
由于我在本地克隆上都能正常工作,所以我想必须有某种方式来“强制” git-lfs来上载所有文件。

第二个问题(现在已解决。请参阅评论。)
另外,我有两个在 merge 前已重命名的脚本:
在主人那里
DebugHUDManager.cs
ConfigurationHUDManager.cs
但是我将类和文件重命名为
DebugHudManager.cs
ConfigurationHudManager.cs
因此,在我的本地(工作)克隆中,当我新克隆时,我会在以后得到以前的文件(..HUD ..),因此GameObject仅附有缺少的脚本。我可以通过仅重命名文件来解决此问题。但这不是gitt中跟踪的也是。它一直说“最新”。

这是我的 .gitattributes :
# Unity
*.cginc   text
*.cs      diff=csharp text
*.shader  text


# Unity YAML
*.anim               merge=unityyamlmerge eol=lf
*.asset              merge=unityyamlmerge eol=lf
*.controller         merge=unityyamlmerge eol=lf
*.mat                merge=unityyamlmerge eol=lf
*.meta               merge=unityyamlmerge eol=lf
*.physicsMaterial    merge=unityyamlmerge eol=lf
*.physicsMaterial2D  merge=unityyamlmerge eol=lf
*.prefab             merge=unityyamlmerge eol=lf
*.unity              merge=unityyamlmerge eol=lf


# Unity LFS
*.cubemap       filter=lfs diff=lfs merge=lfs -text
*.unitypackage  filter=lfs diff=lfs merge=lfs -text


# Image
*.ai    filter=lfs diff=lfs merge=lfs -text
*.apng  filter=lfs diff=lfs merge=lfs -text
*.astc  filter=lfs diff=lfs merge=lfs -text
*.bmp   filter=lfs diff=lfs merge=lfs -text
*.dds   filter=lfs diff=lfs merge=lfs -text
*.eps   filter=lfs diff=lfs merge=lfs -text
*.exr   filter=lfs diff=lfs merge=lfs -text
*.gif   filter=lfs diff=lfs merge=lfs -text
*.hdr   filter=lfs diff=lfs merge=lfs -text
*.jpeg  filter=lfs diff=lfs merge=lfs -text
*.jpg   filter=lfs diff=lfs merge=lfs -text
*.ktx   filter=lfs diff=lfs merge=lfs -text
*.png   filter=lfs diff=lfs merge=lfs -text
*.psd   filter=lfs diff=lfs merge=lfs -text
*.pvr   filter=lfs diff=lfs merge=lfs -text
*.svg   filter=lfs diff=lfs merge=lfs -text
*.svgz  filter=lfs diff=lfs merge=lfs -text
*.tga   filter=lfs diff=lfs merge=lfs -text
*.tif   filter=lfs diff=lfs merge=lfs -text
*.tiff  filter=lfs diff=lfs merge=lfs -text
*.webm  filter=lfs diff=lfs merge=lfs -text
*.webp  filter=lfs diff=lfs merge=lfs -text


# Audio
*.aif   filter=lfs diff=lfs merge=lfs -text
*.m4a   filter=lfs diff=lfs merge=lfs -text
*.mp3   filter=lfs diff=lfs merge=lfs -text
*.ogg   filter=lfs diff=lfs merge=lfs -text
*.wav   filter=lfs diff=lfs merge=lfs -text


# Video
*.asf   filter=lfs diff=lfs merge=lfs -text
*.avi   filter=lfs diff=lfs merge=lfs -text
*.flv   filter=lfs diff=lfs merge=lfs -text
*.mov   filter=lfs diff=lfs merge=lfs -text
*.mp4   filter=lfs diff=lfs merge=lfs -text
*.mpeg  filter=lfs diff=lfs merge=lfs -text
*.mpg   filter=lfs diff=lfs merge=lfs -text
*.ogv   filter=lfs diff=lfs merge=lfs -text
*.wmv   filter=lfs diff=lfs merge=lfs -text


# 3D Object
*.blend  filter=lfs diff=lfs merge=lfs -text
*.dxf    filter=lfs diff=lfs merge=lfs -text
*.fbx    filter=lfs diff=lfs merge=lfs -text
*.lxo    filter=lfs diff=lfs merge=lfs -text
*.ma     filter=lfs diff=lfs merge=lfs -text
*.max    filter=lfs diff=lfs merge=lfs -text
*.mb     filter=lfs diff=lfs merge=lfs -text
*.obj    filter=lfs diff=lfs merge=lfs -text


# Compressed Archive
*.7z   filter=lfs diff=lfs merge=lfs -text
*.bz2  filter=lfs diff=lfs merge=lfs -text
*.gz   filter=lfs diff=lfs merge=lfs -text
*.rar  filter=lfs diff=lfs merge=lfs -text
*.tar  filter=lfs diff=lfs merge=lfs -text
*.zip  filter=lfs diff=lfs merge=lfs -text


# Compiled Dynamic Library
*.dll  filter=lfs diff=lfs merge=lfs -text
*.pdb  filter=lfs diff=lfs merge=lfs -text
*.so   filter=lfs diff=lfs merge=lfs -text


# Compiled Static Library
*.a            filter=lfs diff=lfs merge=lfs -text
*.la           filter=lfs diff=lfs merge=lfs -text
*.lai          filter=lfs diff=lfs merge=lfs -text
*.lib          filter=lfs diff=lfs merge=lfs -text
*.llblgenproj  filter=lfs diff=lfs merge=lfs -text


# Font
*.otf  filter=lfs diff=lfs merge=lfs -text
*.ttf  filter=lfs diff=lfs merge=lfs -text


# Executable/Installer
*.apk  filter=lfs diff=lfs merge=lfs -text
*.exe  filter=lfs diff=lfs merge=lfs -text


# Documents
*.pdf  filter=lfs diff=lfs merge=lfs -text


# Other
*.reason  filter=lfs diff=lfs merge=lfs -text
*.rns filter=lfs diff=lfs merge=lfs -text

进一步说明
  • 经过一些巨大的 merge ,问题开始了。
  • 我没有激活UnityYamlMerge.exe的Unity智能 merge 。 (我现在添加了这个。)
  • 所有丢失的文件的类型均为.prefab.unity。所有这些似乎都是我 merge 之前最新提交的一部分。但是其他.prefab文件也可以很好地下载。
  • 大小似乎也无关紧要,因为大多数文件的大小约为10Kb,而下载得很好的一些.prefab文件的文件大小例如为10Kb。 1,9Mb。
  • Assets 序列化模式=强制文本
  • 我只是使用一个新的.prefab文件进行了另一个测试提交。那很好。唯一不起作用的是那些由 merge 添加/更改的特定.prefab文件。

  • 如何拯救这个项目? o.O
    更新:
    同时,我创建了一个新的存储库,并从工作的本地克隆中复制了文件(当然不包括.git文件夹)。但是,新存储库中的历史当然已经消失了。但是至少我们可以继续合作。

    最佳答案

    我知道您已经解决了 merge 问题,但是我想针对同一问题记录我的修复程序。就是说,我尝试将LFS跟踪的.prefabs merge 到master中,并且文件损坏或链接错误,并且 merge 后不会在Unity项目中加载任何一种方法。
    看到上面的.gitattributes文件后,我意识到问题是SmartMerge(UnityYAMLMerge)无法处理 merge ,因此当然文件也不会 merge 。这是我所做的:
    首先,我重置了master,然后确认一切仍在Unity中正常工作

    git reset --hard origin/master
    
    其次,我更新了.gitattributes文件using settings similar to yours,有效地将所有.prefabs从LFS中移出,以便它们可以由UnityYAMLMerge处理。
    enter image description here
    第三,我将更改提交给了master。
    完成此操作后,切换到我希望 merge 的分支并再次执行相同的任务,这也将.prefabs的更新版本移至UnityYAMLMerge处理。
    最后,回到主服务器,我尝试 merge 更新的分支,所有.prefabs都愉快地 merge 了(由于我强烈建议外部工具对Atom进行一些评论),并且没有出现任何错误。
    编辑:将此设置添加到.gitattributes并不能保证.prefab将移出LFS,只有在编辑.prefab后才会发生。当您尝试 merge 仍指向LFS中的.prefab的分支(这会破坏Unity中的引用)时,这可能会很痛苦。为此,我使用LFS引用将 Assets 文本复制到原始 Assets 上,并在Unity中重新链接。
    atom

    关于git - merge 后如何在git-lfs中修复Unity .prefab文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48109609/

    相关文章:

    c# - 在着色器中使用来自 c# 脚本的函数

    audio - 时间流逝的声音交替

    github - 无法使用 Jenkins GitHub Pull Request Builder 更新 GitHub PR

    git - 无法连接到 git 远程存储库

    ruby-on-rails - 使用 ruby​​ on Rails 仅从 github api 中提取 Unresolved 问题,而不进行任何 pull 请求

    git - 如何执行需要文件名的任务

    c# - 如何在 Unity 中屏蔽自定义 UI 图形?

    git 相当于 'hg serve' ?

    macos - 使用 exit 在预提交 Hook 中停止 git commit

    amazon-web-services - AWS Codepipeline 会将符号链接(symbolic link)传递给工件中的 Codebuild