克隆git后Unity项目出现问题

3
我有一个Unity项目(github link),克隆后无法运行。尽管文件存在,但它们的内容不正确。例如.png文件被替换为文本:

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

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

Assets/External Dependencies/Demigiant/DOTween/Examples/Basics.cs(3,7): error CS0246: The type or namespace name `DG' could not be found. Are you missing an assembly reference?

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

我已确保将版本控制模式设置为可见的元文件,并将资产序列化模式设置为强制文本

我尝试将项目移动到新目录中,删除了.git文件夹,删除了Library,重新制作了所有内容(使用Unity重新打开,然后git init),并将其推送到新存储库。新存储库与先前的存储库完全相同。

我正在使用Unity默认 .gitignore

以及以下.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文件好像被(Unity?)覆盖了。它们在远程仓库中存在正确的。另一方面,外部dll文件根本没有被上传。


对我来说,这是一个与git-lfs有关的问题。你的电脑上安装了吗? - Philippe
是的,它已经安装了。我也非常确定它是使用git-lfs安装的。我会重新安装它。 - RaidenF
@K.Gkinis 你的问题解决了吗? - Marina Liu
@MarinaLiu-MSFT 不,但我还没有时间尝试任何新的东西。 - RaidenF
@K.Gkinis 好的,你可以试一试,有空了反馈结果。 - Marina Liu
3个回答

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
-text属性用于删除文本属性并将此文件视为二进制文件。因此,我认为你的答案是误导性的。 - zilongshanren

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,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsOPCancelSubscribeAck,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsSendMsgAck,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsBarrageItem,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.BulletWebSocket,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类c__Iterator0,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsEventData,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsEventScene,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsEventItem,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsTerminalPage,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsOPSubscribe,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsOPHeartBeat,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsOPHeartbeatAck,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsOPCancelSubscribe,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsOPCancelSubscribeAck,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsSendMsgAck,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsBarrageItem,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.BulletWebSocket,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类c__Iterator0,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsEventData,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。无法加载类com.tencent.pandora.WsEventScene,用于Assembly-CSharp,Version=2.0.0.668,Culture=neutral,PublicKeyToken=null。
如果有人遇到和我一样的问题,你可以检查一下你的ProjectSettings.asset文件,不应该将LF行结尾设置为它,保持为LFCR,我的问题就神奇地消失了。

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

“在路径上取消设置文本属性告诉 Git 在签入或签出时不尝试进行任何行尾转换。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接