将Git源代码控制与Unity 3D结合使用的最佳实践是什么,特别是在处理Unity 3D项目的二进制特性方面?请描述工作流程,.gitignore中将包括哪些路径,应在Unity和/或项目中设置哪些设置以及应注意的其他任何特殊事项。
注意:我意识到使用Asset Server是Unity推荐的方式,但是出于多种原因,我想使用Git。请不要说出任何答案,也不要说我应该只使用资产服务器。资产服务器确实不是我的选择。
将Git源代码控制与Unity 3D结合使用的最佳实践是什么,特别是在处理Unity 3D项目的二进制特性方面?请描述工作流程,.gitignore中将包括哪些路径,应在Unity和/或项目中设置哪些设置以及应注意的其他任何特殊事项。
注意:我意识到使用Asset Server是Unity推荐的方式,但是出于多种原因,我想使用Git。请不要说出任何答案,也不要说我应该只使用资产服务器。资产服务器确实不是我的选择。
Answers:
以下是我个人博客的摘录。
2015年10月更新: GitHub已为Git发布了一个名为Git LFS的插件,可直接解决以下问题。您现在可以轻松高效地对大型二进制文件进行版本控制!
Git可以直接使用3D游戏。但是,这里的主要警告是,随着提交历史记录的膨胀,从长远来看,对大型(> 5 MB)媒体文件进行版本控制可能会成为一个问题。通过仅在二进制资产被视为最终版本时对其进行版本控制,我们已经解决了项目中的潜在问题。我们的3D艺术家使用Dropbox的工作对WIP的资产,无论是上述的原因,因为它是很多更快和更简单(没有多少艺术家将积极想使用Git的!)。
考虑到您自己的团队经验和合作方式,您需要自行决定Git工作流程。然而。我强烈建议使用原作者此处描述的适当命名的Git Flow方法。
在本文中,我不会过多地介绍该方法的工作原理,因为作者可以用很少的话来完美地描述它,因此很容易理解。我已经和我的团队一起使用了一段时间,这是到目前为止我们尝试过的最好的工作流程。
这确实是个人喜好,因为在Git GUI或是否完全使用GUI方面有很多选择。但是我想建议一个免费的SourceTree应用程序,因为它可以完美地与Git Flow扩展插件一起插入。在此处阅读有关在其应用程序中实现Git Flow方法的SourceTree教程。
对于最新版本的检出,Github保留了Unity.gitignore文件,而没有特定于操作系统的信息。
# =============== #
# Unity generated #
# =============== #
Temp/
Library/
# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj
# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
对于Unity 3D v4.3及更高版本:
External
选项Unity → Preferences → Packages → Repository
。Edit
菜单并选择Project Settings → Editor
:
Version Control Mode
到Visible Meta Files
。Asset Serialization Mode
到Force Text
。File
菜单保存场景和项目。在这里查看我的博客文章以获取有关如何执行此操作的步骤。
在Unity3D项目中使用Git的主要烦恼之一是Git不在乎目录,并且从其中删除文件后会很乐意将空目录留在身边。Unity3D将为这些目录创建* .meta文件,当Git承诺不断添加和删除这些元文件时,Unity3D可能在团队成员之间引起一场争斗。
将此Git合并后的钩子添加到其中/.git/hooks/
包含Unity3D项目的存储库的文件夹中。在任何Git拉/合并之后,它将查看已删除的文件,检查其所在目录是否为空,如果是,则将其删除。
Hidden Meta Files
?
在Unity 4.3中,您还必须从首选项中启用“外部”选项,但是自从Unity 4.5起,他们为此放弃了选项,因此完整的设置过程如下所示:
Visible Meta Files
在Editor → Project Settings → Editor → Version Control Mode
Force Text
在Editor → Project Settings → Editor → Asset Serialization Mode
File
菜单保存场景和项目此外,我们的团队正在使用更多扩展.gitignore
文件:
# =============== #
# Unity generated #
# =============== #
Temp/
Library/
# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj
# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
请注意,您需要保留在源代码管理之下的唯一文件夹是Assets
和ProjectSettings
。
有关在源代码控制下保持Unity项目的更多信息,请参见 本文中。
Hidden Meta Files
?
什么是GIT?
Git是Linus Torvalds在2005年(Linux OS的创始人)开发的一个免费的开源分布式版本控制系统(SCM)。它的创建是为了快速有效地控制从小型项目到大型项目的所有内容。谷歌,Facebook,微软等领先公司每天都使用GIT。
如果您想了解有关GIT的更多信息,请查看此快速教程,
首先,请确保已设置Git环境。您需要同时设置本地环境和Git存储库(我更喜欢Github.com)。
GIT客户端应用程序Mac / Windows
对于GIT gui客户应用程序,我建议您使用Github.com,
GitHub是与朋友,同事,同学和完全陌生的人共享代码的地方。超过500万人使用GitHub共同构建了惊人的东西。
Unity3d设置
您需要进行这些设置
在编辑→项目设置→编辑器→版本控制模式下切换到可见元文件。
在Unity→偏好设置→软件包→存储库中启用外部选项
在编辑→项目设置→编辑器→资产序列化模式下切换到强制文本。
Preferences > Packages
在Unity 5.x Normal中找不到?ty
要添加所有内容,最好在Unity中使用git lfs。自问世以来我一直在使用它,我对此没有任何问题。
您将要将此添加.gitattributes
到.gitignore
文件旁边
*.cs diff=csharp text
*.cginc text
*.shader text
*.mat merge=unityyamlmerge eol=lf
*.anim merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
*.physicsMaterial2D merge=unityyamlmerge eol=lf
*.physicsMaterial merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.meta merge=unityyamlmerge eol=lf
*.controller merge=unityyamlmerge eol=lf
*.a filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.aif filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.FBX filter=lfs diff=lfs merge=lfs -text
*.rns filter=lfs diff=lfs merge=lfs -text
*.reason filter=lfs diff=lfs merge=lfs -text
*.lxo filter=lfs diff=lfs merge=lfs -text
那是我的滚动文件列表。如果使用未列出的其他二进制文件,请添加它们。
我还配置了使用yamlmerge的文件,您需要进行设置。您可以在此处阅读有关内容:http : //docs.unity3d.com/Manual/SmartMerge.html
现在,我们可以无缝集成,与Github统一到Unity扩展... https://unity.github.com/
新的GitHub for Unity扩展为Unity带来了GitHub工作流程及更多功能,并通过Git LFS和文件锁定为大文件提供支持。
在撰写本文时,该项目为Alpha版本,但仍可用于个人项目。
我认为我可以.gitignore
为感兴趣的任何人发布一个简单的文章:
# Ignore Everything
/*
# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
UnityPackageManager/
和Packages/
)的Unity 2017和2018,我发现此脚本的效果也最佳。
使用git进行unity-3d源代码版本控制时要记住的主要事项:
(A)不要签入库文件夹。我过去曾多次犯此错误,并为此受了苦!在将项目/文件添加到git之前,删除或移出库文件夹。
(B)使用“可见的元文件” -对于最新的统一版本-5.3.4及更高版本,默认情况下会发生这种情况。对于某些早期版本,您需要在以下位置更改设置:编辑->项目设置->版本控制
(C)为Unity使用.gitignore文件-确保保持理智并且不会不必要地添加文件 -如果在android / tizen上-添加规则以将APK和TPK文件排除在添加到存储库之外。Google围绕着一个.gitignore文件以实现统一,或者使用此模型.gitignore for GitHub提供的Unity:https : //github.com/github/gitignore/blob/master/Unity.gitignore
(D)确保将.gitignore文件作为第一个添加的文件添加到存储库中-因为过去我个人错过了添加.gitignore文件的操作。对于为什么会发生这种情况,事后有很多想法,但是如今,我只是复制并添加.gitignore文件,这是设置存储库的第一步。
所以...要为Unity项目准备好git,请执行以下操作:
(1)转到项目文件夹
(2)输入git init。
(3)复制.gitignore文件:在MacOS上:cp〜/ Downloads / .gitignore在Windows上:复制c:\ Users [您的用户名] \ Downloads.gitignore。
(4)git添加.gitignore
(5)git添加*
希望这对您有所帮助...
我更希望您使用BitBucket,因为它不是公开的,而且Unity上有关于Bitbucket的官方教程。
https://unity3d.com/learn/tutorials/topics/cloud-build/creating-your-first-source-control-repository
希望这可以帮助。
您可以使用Github for Unity,这是一个Unity扩展,它将git工作流引入Unity的UI。
Github for Unity刚刚发布了扩展的1.0版本。
Unity还提供自己的Source版本控件。在unity5之前,它是unityAsset Server,但现在已贬值。并启动了一种称为unity合作的新SVN控制系统。但是使用unity和任何SVN的主要问题是提交和合并场景。但是svn的Non提供了解决这种冲突或合并场景的方式。因此,取决于您熟悉的SVN。我在Mac上使用SmartSVN工具。和乌龟在窗户上。
我想从以前对git感到沮丧的人那里添加一个非常简单的工作流程。有几种使用git的方法,可能最常见的统一方法是GitHub Desktop,Git Bash和GitHub Unity
https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069。
本质上,他们都做相同的事情,只是用户选择。您可以使用git进行大文件设置,该设置允许1GB免费大文件存储以及数据包中可用的额外存储,价格为4美元/月,50GB,这将允许您将大于100mb的文件推送到远程存储库(它将实际文件存储在服务器和您的仓库中的指针)
如果出于某种原因不想设置lfs,则可以在项目所在目录中键入size:large来扫描Windows中大于128 mb的文件。尽管可能会丢失一些介于100mb和128mb之间的文件,但是这对于搜索大文件可能非常方便。
git bash的一般格式是
git添加 (添加要提交的文件)
git commit -m'message'(使用一条消息提交文件,它们仍然在您的PC上,而不是在远程仓库中,基本上它们已经被“版本化”为新的提交)
git push(将文件推送到存储库)
git bash对于统一项目的缺点是,如果文件> 100mb,则在推送之前不会出错。然后,您必须通过将头部重置为上一个提交来撤消提交。有点麻烦,特别是如果您是git bash的新手。
GitHub Desktop的优点是,在您提交100mb的文件之前,它会给您弹出错误消息。然后,您可以缩小这些文件或将它们添加到.gitignore文件中。
要使用.gitignore文件,请在本地存储库根目录中创建一个名为.gitignore的文件。您只需一次省略一行即可添加文件。通常可以省略SharedAssets和其他非资产文件夹文件,它们会在编辑器中自动重新填充(可以重新导入软件包等)。您还可以使用通配符排除文件类型。
如果其他人正在使用您的GitHub存储库,并且您想克隆或提取,则在GitHub桌面或Git bash上也可以使用这些选项。
我没有提到太多关于Unity GitHub软件包的信息,您可以在编辑器中使用GitHub,因为我个人认为该界面不是非常有用,并且我认为总体而言它不会帮助任何人熟悉git,但这只是我的想法。偏爱。