How to use Git for Unity3D source control?
使用Unity 3D的Git源代码控制的最佳实践是什么,特别是在处理Unity 3D项目的二进制特性时? 请描述工作流程,.gitignore中将包含哪些路径,应在Unity和/或项目中设置哪些设置,以及应注意的任何其他特殊事项。
注意:我意识到使用资产服务器是Unity推荐的方式,但我想出于各种原因使用Git。 请不要说明我应该使用资产服务器的答案。 资产服务器真的不适合我。
以下是我个人博客的摘录。
将Git与3D游戏结合使用
2015年10月更新:GitHub已经为Git发布了一个名为Git LFS的插件,可以直接处理以下问题。您现在可以轻松高效地编写大型二进制文件!
Git可以开箱即用的3D游戏。但是,这里的主要警告是,随着您的提交历史记录膨胀,版本化大型(> 5 MB)媒体文件可能会成为长期问题。我们已经在我们的项目中解决了这个潜在的问题,因为它只考虑了二进制资产的最终版本。我们的3D艺术家使用Dropbox处理WIP资产,这两者都是出于上述原因,因为它更快更简单(没有多少艺术家会主动使用Git!)。
Git工作流程
根据您自己的团队经验以及您如何一起工作,您的Git工作流程是您需要自行决定的。然而。我强烈推荐原作者在此描述的适当命名的Git Flow方法。
我不会在这里深入探讨该方法的工作方式,因为作者完美地描述了它并且很少用语言也很容易理解。我已经和我的团队一起使用了一段时间,这是迄今为止我们尝试过的最好的工作流程。
Git GUI客户端应用程序
这实际上是个人偏好,因为在Git GUI方面有很多选择,或者根本不使用GUI。但我想建议免费的SourceTree应用程序,因为它完全插入Git Flow扩展。阅读SourceTree教程,了解如何在其应用程序中实现Git Flow方法。
Unity3D忽略文件夹
对于最新版本的结帐,Github维护Unity.gitignore文件,没有操作系统细节。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # =============== # # 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 |
Unity3D设置
对于Unity 3D v4.3及更高版本:
您想将现有仓库迁移到LFS吗?
查看我的博客文章,了解如何在此处执行此操作的步骤。
附加配置
使用Git和Unity3D项目的少数主要烦恼之一是Git不关心目录,并且在从它们中删除文件后会愉快地留下空目录。 Unity3D将为这些目录制作* .meta文件,当Git提交不断添加和删除这些元文件时,可能会导致团队成员之间发生争执。
将此Git合并后挂钩添加到
在Unity 4.3中,您还必须从首选项中启用"外部"选项,但是从Unity 4.5开始,它们会删除选项,因此完整的设置过程如下所示:
我们的团队也在使用更多扩展的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # =============== # # 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 Project保留在源代码管理下的更多信息,请参阅此文章。
什么是GIT?
Git是由Linus Torvalds于2005年开发的免费开源分布式版本控制系统(SCM)(Linux OS创始人)。它的创建是为了控制从小到大的项目,速度和效率。谷歌,Facebook,微软等领先公司每天都在使用GIT。
如果您想了解有关GIT的更多信息,请查看此快速教程,
首先确保你已经设置了你的Git环境。你需要设置本地环境和Git存储库(我更喜欢Github.com)。
GIT客户端应用程序Mac / Windows
对于GIT gui客户端应用程序,我建议你去Github.com,
GitHub是与朋友,同事,同学和完全陌生人分享代码的地方。超过五百万人使用GitHub一起构建令人惊叹的东西。
Unity3d设置
您需要进行这些设置
在编辑→项目设置→编辑器→版本控制模式中切换到可见元文件。
在Unity→首选项→包→存储库中启用外部选项
在编辑→项目设置→编辑器→资产序列化模式中切换到强制文本。
资源:
使用Git与3D游戏源控制
要添加到所述的所有内容,将git lfs与Unity一起使用也是理想的选择。我一直在使用它,因为它出来了,我没有遇到它。
您需要在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | *.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
我想我可能会为感兴趣的人发布一个更简单的
1 2 3 4 5 6 7 8 | # Ignore Everything /* # Except for these: !/.gitignore !/Assets !/Packages !/ProjectSettings |
我们现在可以无缝集成到Github到Unity扩展的统一...
https://unity.github.com/
新的GitHub for Unity扩展为GitHub带来了更多工作流程,为Git LFS和文件锁定提供了大文件支持。
在撰写本文时,项目采用alpha格式,但仍可用于个人项目。
我宁愿你更喜欢你使用BitBucket,因为它不公开,并且Unity在Bitbucket上有一个官方教程。
https://unity3d.com/learn/tutorials/topics/cloud-build/creating-your-first-source-control-repository
希望这可以帮助。
使用git进行统一-3d源代码版本控制时要记住的主要事项:
(A)不要签入Library文件夹。我过去曾多次犯过这个错误,并为此而受苦!
在将项目/文件添加到git之前删除或移出库文件夹。
(B)使用"可见元文件" - 对于最新的统一版本 - 5.3.4及更高版本,默认情况下会发生这种情况。对于某些早期版本,您需要更改以下设置:
编辑 - >项目设置 - >版本控制
(C)为Unity使用.gitignore文件,以确保维护健全性并且不会不必要地添加文件 - 如果在android / tizen上 - 添加规则以排除APK和TPK文件被添加到存储库。
谷歌周围的.gitignore文件为统一或者使用这个模型.gitignore for Unity由GitHub提供:
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 [yourusername] Downloads.gitignore。
(4)git add .gitignore
(5)git add *
希望这有助于......一切顺利!
将Version Control设置为元文件。设置资产序列化以强制文本。
我想这就是你想要的。
你可以使用Github for Unity,这是一个Unity扩展,它将git工作流带入Unity的UI。
Github for Unity刚刚发布了扩展版1.0。
- 它使用git-lfs(git大文件支持)来正确存储大资产
- 文件锁定,以便其他人不会覆盖您的资产提交
- 推送和拉出任何远程存储库
- 您也可以在Unity资源商店下载它:https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069
只有Assets和ProjectSettings文件夹需要在git版本控制下。
你可以做这样的gitignore。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [Ll]ibrary/ [Tt]emp/ [Oo]bj/ # Autogenerated VS/MD solution and project files *.csproj *.unityproj *.sln *.suo *.userprefs # Mac .DS_Store *.swp *.swo Thumbs.db Thumbs.db.meta .vs/ |
Unity还提供自己的Source版本控件。在unity5之前,它是unityAsset Server,但现在它已经贬值了。并启动一个名为unity collaborate的新SVN控制系统。但是使用unity和任何SVN的主要问题是提交和合并场景。但是非svn给我们解决这种冲突或合并场景的方法。所以依赖于你熟悉哪个SVN。我在Mac上使用SmartSVN工具。和乌龟在窗户上。
只需加入Gitignore的子喷气机。
如果你的git项目的wihtin根目录,推荐的方法只会忽略Library和Temp。如果你像我一样,有时需要统一项目成为回购的一部分,而不是整个回购,gitignore中的正确字符串将是:
1 2 3 | **/[Tt]emp **/[Ll]ibrary **/[Bb]uild |