git clone之后破碎的Unity项目

时间:2018-06-02 16:37:52

标签: git unity3d version-control git-lfs

我有一个Unity项目(github link),克隆后无效。即使文件存在,它们的内容也不正确。例如.png文件替换为文本:

  

版本https://git-lfs.github.com/spec/v1   oid sha256:089f8198df161233681006c4243f6d6babb2e125062a21ea727d0d6c97889d26   大小1035

我从外部资产包(例如DOTween)获得的一些DLL也可能无法正确存储,因为编译器会抱怨未声明的命名空间。

  

Assets / External Dependencies / Demigiant / DOTween / Examples / Basics.cs(3,7):错误CS0246:找不到类型或命名空间名称“DG”。你错过了装配参考吗?

更新 实际上,dll甚至不存在。为什么?他们不是gitignore的一部分。

我确保将Version Control Mode设置为Visible Meta FilesAsset Serialization ModeForce Text

我尝试将项目移动到新目录,删除.git文件夹,删除Library,重新构建所有内容(重新打开Unity,然后重新git init),然后推送到新的仓库。新的仓库与前一个仓库有着完全相同的问题。

我正在使用default .gitignore for Unity

以下.gitattributes(启用LFS):

# 3D models
*.3dm filter=lfs diff=lfs merge=lfs -text
*.3ds filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text
*.c4d filter=lfs diff=lfs merge=lfs -text
*.collada filter=lfs diff=lfs merge=lfs -text
*.dae filter=lfs diff=lfs merge=lfs -text
*.dxf filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.jas filter=lfs diff=lfs merge=lfs -text
*.lws 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
*.ply filter=lfs diff=lfs merge=lfs -text
*.skp filter=lfs diff=lfs merge=lfs -text
*.stl filter=lfs diff=lfs merge=lfs -text
*.ztl filter=lfs diff=lfs merge=lfs -text
# Audio
*.aif filter=lfs diff=lfs merge=lfs -text
*.aiff filter=lfs diff=lfs merge=lfs -text
*.it filter=lfs diff=lfs merge=lfs -text
*.mod filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.s3m filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.xm filter=lfs diff=lfs merge=lfs -text
# Fonts
*.otf filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
# Images
*.bmp 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
*.iff filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.pict filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.psd 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
# Collapse Unity-generated files on GitHub
*.asset linguist-generated
*.mat linguist-generated
*.meta linguist-generated
*.prefab linguist-generated
*.unity linguist-generated

更新:

经过进一步调查,似乎png文件在克隆后打开项目时会被覆盖(通过统一?)。它们在远程存储库中正确存在。另一方面,外部dll根本没有上传。

3 个答案:

答案 0 :(得分:2)

您的.gitattributes文件错误。

  

*.png filter=lfs diff=lfs merge=lfs -text

文本?文本?为什么你想把.png文件视为文本?大多数其他属性也是如此。

查看我的自己的 .gitattributes文件,我有这个:
(是的,大多数行都是评论)

###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain

当我通过GitHub桌面应用程序创建git存储库时,这个文件是我自动创建的。我听说它“不太好”,但我发现它做到了我需要的东西。即不妨碍提交并推送到GitHub。

答案 1 :(得分:0)

删除此部分的git clone来获取您的lfs文件。

# Collapse Unity-generated files on GitHub
*.asset linguist-generated
*.mat linguist-generated
*.meta linguist-generated
*.prefab linguist-generated
*.unity linguist-generated

git clone在决定是否解析lfs文件之前先读取.gitattribute文件。如果发现语法,则无法理解,将中止该过程。我认为linguist-generated是非标准属性,导致您的存储库无法提取更改。

我不敢评论其他答案,但是-text不是问题。

在gitattribute文件中,在属性之前添加-会“取消设置”该属性。在这种情况下,意味着不要将其视为文本。

来自https://git-scm.com/docs/gitattributes

  

“在路径上取消设置text属性会告诉Git不要尝试任何操作   签入或签出时的行尾转换。”

答案 2 :(得分:0)

您不应该使用 LFS 来跟踪 DLL 文件,它会导致您的 DLL 编译错误。

我也遇到了这个问题。错误:命名空间不存在。事实证明,没有下载包含该命名空间的 DLL。 DLL 包含符号链接文本。 C# 忽略了那个 DLL 并确实加载了符号 -> 编译失败。

您可以使用以下命令使DLL文件恢复正常:

git lfs untrack *.dll
git rm --cached *.dll
git add *.dll
git commit -m "add dll back to non-LFS files"

然后您重新结帐可以解决您的问题。

我的部分错误消息是:

<块引用>

com.tencent.pandora.WsOPCancelSubscribe 类无法加载, 用于 Assembly-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null 类 com.tencent.pandora.WsOPCancelSubscribeAck 无法加载,使用 在 Assembly-CSharp 中,版本=2.0.0.668,文化=中性, PublicKeyToken=null com.tencent.pandora.WsSendMsgAck 类可以 未加载,用于Assembly-CSharp,Version=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsBarrageItem 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null 类 com.tencent.pandora.BulletWebSocket 无法加载,在Assembly-CSharp中使用,版本=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 c__Iterator0 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null com.tencent.pandora.WsEventData 类可以 未加载,用于Assembly-CSharp,Version=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsEventScene 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null com.tencent.pandora.WsEventItem 类可以 未加载,用于Assembly-CSharp,Version=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsTerminalPage 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null com.tencent.pandora.WsOPSubscribe 类可以 未加载,用于Assembly-CSharp,Version=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsOPHeartBeat 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null 类 com.tencent.pandora.WsOPHeartbeatAck 无法加载,在Assembly-CSharp中使用,版本=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsOPCancelSubscribe 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null 类 com.tencent.pandora.WsOPCancelSubscribeAck 无法加载,使用 在 Assembly-CSharp 中,版本=2.0.0.668,文化=中性, PublicKeyToken=null com.tencent.pandora.WsSendMsgAck 类可以 未加载,用于Assembly-CSharp,Version=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsBarrageItem 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null 类 com.tencent.pandora.BulletWebSocket 无法加载,在Assembly-CSharp中使用,版本=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 c__Iterator0 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null com.tencent.pandora.WsEventData 类可以 未加载,用于Assembly-CSharp,Version=2.0.0.668, Culture=neutral, PublicKeyToken=null 类 com.tencent.pandora.WsEventScene 无法加载,用于 汇编-CSharp,版本=2.0.0.668,文化=中性, PublicKeyToken=null

如果有人遇到和我一样的问题,你可以检查一下你的 ProjectSettings.asset 文件,你不应该给它设置 LF 行尾,把它保留为 LFCR,我的问题就神奇地消失了。