我有一个 Unity 项目 ( github link ),它在克隆后不起作用。即使文件在那里,它们的内容也不正确。例如 .png 文件替换为文本:
version https://git-lfs.github.com/spec/v1 oid sha256:089f8198df161233681006c4243f6d6babb2e125062a21ea727d0d6c97889d26 size 1035
我从外部 Assets 包(例如 DOTween)获得的一些 DLL 也可能没有正确存储,因为编译器提示未声明的命名空间。
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 的一部分。
我已确保将 Version Control Mode
设置为 Visible Meta Files
并且
Assets 序列化模式
到强制文本
。
我尝试将项目移动到新目录,删除 .git 文件夹,删除 Library
,重新制作所有内容(使用 Unity 重新打开,然后 git init
),然后推到一个新的 repo 协议(protocol)。新的 repo 协议(protocol)与之前的 repo 协议(protocol)存在完全相同的问题。
我正在使用 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 根本不会上传。
最佳答案
你的 .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。
关于git - git 克隆后损坏的 Unity 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659009/