如何在合并后修复git-lfs中的Unity .prefab文件

der*_*ugo 6 git github unity-game-engine git-lfs

我正在Unity3DUnity17.2.1中开展一个项目

我在Windows 10上使用git Git-LFSSourceTree.

我现在的问题是:

在我的本地克隆一切正常.
但是如果我在一个新文件夹中克隆项目(用于测试),我会遇到很多错误.它可以LFS很好地下载大多数文件轨道,但对于其中一些我得到:

下载对象时出错:Assets/VRITM/_Prefabs/SceneGraph/NetworkManager/DebugHUD/ConfigurationPanel/InputField.prefab(3a0c39040b397ab7120d427e019ad767b2bd6b91386856f9730507be1b59ad3c)

我可以以某种方式在本地恢复"复制"(新克隆的)项目,因为我已将整个Assets-Folder从我的工作本地克隆导出为unitypackage.

但在这样做之后,git仍然声称它是"最新的"所以我不能再次提交/推送.

如何修复远程存储库(github)上的LFS跟踪文件?

因为我已经在我的本地克隆上工作正常了所以我想必须有某种方式来"强制" git-lfs上传所有文件,就像我拥有它们一样.


第二个问题(现在已经解决了.请参阅评论.)

另外,我有两个在合并之前重命名的脚本:
在主服务器上它是

DebugHUDManager.cs
ConfigurationHUDManager.cs
Run Code Online (Sandbox Code Playgroud)

但我将类和文件重命名为

DebugHudManager.cs
ConfigurationHudManager.cs
Run Code Online (Sandbox Code Playgroud)

所以在我的本地(工作)克隆中我有后来当我新克隆时我得到以前的文件(..HUD ..)因此GameObject只附加了缺少的脚本.我可以通过再次重命名文件来解决这个问题.但这也没有在git中跟踪.它一直说"最新".


这是我的.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
Run Code Online (Sandbox Code Playgroud)

进一步说明

  • 在一些巨大的合并后问题开始了.

  • 我没有UnityYamlMerge.exe激活Unity的Smart-Merging .(我现在加了.)

  • 所有丢失的文件都是类型.prefab.unity.在合并之前,所有这些似乎都是我最新提交的一部分.但其他.prefab文件下载正常.

  • 此外,大小似乎并不重要,因为大多数都有10Kb,而一些.prefab下载良好的文件有例如1,9Mb.

  • 资产序列化模式= 强制文本

  • 我刚刚用一个新.prefab文件做了另一个测试提交.这很好用.唯一不起作用的是.prefab合并添加/更改的特定文件.

我该如何解救这个项目?OO

更新:
同时我创建了一个新的存储库并从我工作的本地克隆中复制了文件(包括.git文件夹的文件).但是当然新存储库中的历史记录已经消失了.但至少我们可以继续合作.

ow3*_*w3n 1

我知道您已经解决了合并问题,但我想记录我对同一问题的修复。也就是说,我尝试将 LFS 跟踪合并.prefabs到 master 中,但文件要么已损坏,要么链接错误,无论哪种方式都不会在合并后加载到 Unity 项目中。

\n

看到.gitattributes上面的文件后,我意识到问题是 SmartMerge (UnityYAMLMerge) 没有处理合并,因此文件当然不会合并。这就是我所做的:

\n

首先,我重置了 master,然后确认 Unity 中的一切仍然有效

\n
git reset --hard origin/master\n
Run Code Online (Sandbox Code Playgroud)\n

其次,我使用与您类似的设置.gitattributes更新了我的文件,有效地将所有内容移出 LFS,以便可以由 UnityYAMLMerge 处理它们。.prefabs

\n

在此输入图像描述

\n

第三,我将更改提交给master。

\n

完成此操作后,切换到我希望合并的分支并再次执行相同的任务,这也将更新版本移至.prefabs由 UnityYAMLMerge 处理。

\n

最后,回到 master,我尝试合并更新的分支,所有分支都.prefabs愉快地合并了(感谢 Atom 中的一些评论,我强烈推荐外部工具)并且没有出现任何错误。

\n

编辑:将此设置添加到 .gitattributes 并不能保证 .prefab 会移出 LFS\xe2\x80\x94,只有在编辑 .prefab 后才会发生。当您尝试合并仍然指向 LFS 中的 .prefab 的分支(这会破坏 Unity 中的引用)时,这可能会很痛苦。为此,我使用 LFS 参考将资源文本复制到原始资源上,并在 Unity 中重新链接。

\n

原子

\n