[英]How to use Git for Unity3D source control?
将Git源代码控制与 Unity 3D 一起使用的最佳实践是什么,特别是在处理 Unity 3D 项目的二进制性质时? 请描述工作流程,.gitignore 中将包含哪些路径,Unity 和/或项目中应设置哪些设置,以及任何其他应注意的特殊事项。
注意:我知道使用资产服务器是 Unity 推荐的方式,但出于各种原因我想使用 Git。 请不要回答 state 或争辩说我应该只使用资产服务器。 资产服务器真的不是我的选择。
以下是我个人博客的节选。
2015 年 10 月更新: GitHub 此后发布了一个名为Git LFS 的Git 插件,该插件直接处理以下问题。 您现在可以轻松有效地对大型二进制文件进行版本控制!
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 及更高版本:
Unity → Preferences → Packages → Repository
启用External
选项。Edit
菜单并选择Project Settings → Editor
:
Version Control Mode
切换到Visible Meta Files
。Asset Serialization Mode
切换为Force Text
。File
菜单保存场景和项目。查看我的博客文章,了解如何在此处执行此操作的步骤。
将 Git 与 Unity3D 项目一起使用的少数主要烦恼之一是 Git 不关心目录,并且在从目录中删除文件后会很高兴地留下空目录。 Unity3D 将为这些目录创建 *.meta 文件,并且当 Git 提交不断添加和删除这些元文件时,可能会导致团队成员之间发生一些争执。
将此 Git 合并后挂钩添加到/.git/hooks/
文件夹中,用于其中包含 Unity3D 项目的存储库。 在任何 Git pull/merge 之后,它会查看哪些文件已被删除,检查它所在的目录是否为空,如果是则将其删除。
在 Unity 4.3 中,您还必须从首选项中启用外部选项,但从 Unity 4.5 开始,他们放弃了该选项,因此完整的设置过程如下所示:
Editor → Project Settings → Editor → Version Control Mode
切换到Visible Meta Files
Force Text
in 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 项目置于源代码控制之下的更多信息,您可以在这篇文章中找到。
什么是 GIT?
Git 是由 Linus Torvalds(Linux OS 创始人)于 2005 年开发的免费开源分布式版本控制系统(SCM)。 它旨在快速高效地控制从小到大的所有项目。 谷歌、Facebook、微软等领先公司每天都在使用 GIT。
如果您想了解有关 GIT 的更多信息,请查看此快速教程,
首先确保你已经设置了 Git 环境。你需要设置本地环境和 Git 存储库(我更喜欢 Github.com)。
GIT 客户端应用程序 Mac/Windows
对于 GIT gui 客户端应用程序,我建议您使用 Github.com,
GitHub 是与朋友、同事、同学和完全陌生的人共享代码的地方。 超过 500 万人使用 GitHub 共同构建令人惊叹的事物。
Unity3d 设置
你需要做这些设置
在编辑 → 项目设置 → 编辑器 → 版本控制模式中切换到可见元文件。
在 Unity → Preferences → Packages → Repository 中启用外部选项
在 Edit → Project Settings → Editor → Asset Serialization Mode 中切换到 Force Text。
为了补充说明的所有内容,将git lfs与 Unity 一起使用也是理想的选择。 自从它问世以来我一直在使用它,我没有遇到任何问题。
您需要在.gitignore
文件旁边添加此.gitattributes
*.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
我想我可以为任何感兴趣的人发布一个更简单的.gitignore
:
# Ignore Everything
/*
# Except for these
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
我们现在与 Github to Unity 扩展无缝集成到 unity ... https://unity.github.com/
新的 GitHub for Unity 扩展为 Unity 带来了 GitHub 工作流和更多内容,通过 Git LFS 和文件锁定提供对大文件的支持。
在撰写本文时,该项目处于 alpha 阶段,但仍可用于个人项目。
使用 git 进行 unity-3d 源代码版本控制时要记住的主要事项:
(A)不要签入 Library 文件夹。 我过去曾多次犯过这个错误,并为此受苦! 在将项目/文件添加到 git 之前删除或移出库文件夹。
(B) 使用“可见元文件” - 对于最新的统一版本 - 5.3.4 及更高版本默认情况下会发生这种情况。 对于某些早期版本,您需要更改以下设置:编辑-> 项目设置-> 版本控制
(C) 为 Unity 使用 .gitignore 文件 - 确保保持完整性并且不会不必要地添加文件- 如果在 android / tizen 上 - 添加规则以排除 APK 和 TPK 文件被添加到存储库。 谷歌搜索 .gitignore 文件以实现统一,或者使用 GitHub 提供的此模型 .gitignore for Unity:https ://github.com/github/gitignore/blob/master/Unity.gitignore
(D) 确保 .gitignore 文件作为第一个添加的文件添加到存储库 - 因为过去我个人错过了添加 .gitignore 文件。 事后有很多想法为什么会发生这种情况 - 但现在我只是复制并添加 .gitignore 文件作为设置存储库的第一步。
所以……要为 git 准备一个 Unity 项目,请执行以下操作:
(1) 进入项目文件夹
(2) 输入 git init 。
(3) 复制 .gitignore 文件: 在 MacOS 上: cp ~/Downloads/.gitignore 在 Windows 上:复制 c:\\Users[yourusername]\\Downloads.gitignore 。
(4) git add .gitignore
(5) git 添加 *
希望这会有所帮助...一切顺利!
我宁愿您使用 BitBucket,因为它不是公开的,并且 Unity 有一个关于 Bitbucket 的官方教程。
https://unity3d.com/learn/tutorials/topics/cloud-build/creating-your-first-source-control-repository
希望这可以帮助。
Edit -> Project Settings -> Editor
将版本控制设置为元文件。 设置资产序列化以强制文本。
我想这就是你想要的。
您可以使用Github for Unity ,这是一个Unity 扩展,可将 git 工作流带入 Unity 的 UI。
Github for Unity刚刚发布了该扩展的 1.0 版。
只有Assets和ProjectSettings文件夹需要在 git 版本控制下。
你可以像这样制作一个 gitignore。
[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/
只是加入 Gitignore 的 subjet。 推荐的方法只忽略 Library 和 Temp,如果它在你的 git 项目的根目录中。 如果你像我一样,有时需要统一项目作为回购的一部分,而不是整个回购,gitignore 中的正确字符串将是:
**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild
我强烈建议您切换到 PlasticSCM。 这是 Unity 已经迁移到的东西,并提供了一个设计师兼开发人员的工作流程来管理诸如游戏开发之类的复杂事物的版本控制。
您可以免费获得 3 个用户的云版。 这取代了 Unity 的协作工具。
注意:我真的很难使用 Git/Bitbucket 和 SourceTree 来管理一个简单的项目。
我想从过去对 git 感到沮丧的人那里添加一个非常简单的工作流程。 有几种使用 git 的方法,可能最常见的 unity 是 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'(提交带有消息的文件,它们仍然在你的电脑上而不是在远程仓库中,基本上它们已经被“版本化”为一个新的提交)
git push(将文件推送到存储库)
git bash 对于 unity 项目的缺点是,如果文件大于 100mb,则在推送之前不会出现错误。 然后,您必须通过将您的头重置为上一次提交来撤消您的提交。 有点麻烦,特别是如果你是 git bash 的新手。
GitHub Desktop 的优势在于,在您提交 100mb 的文件之前,它会给您一个弹出错误消息。 然后,您可以缩小这些文件或将它们添加到 .gitignore 文件中。
要使用 .gitignore 文件,请在本地存储库根目录中创建一个名为 .gitignore 的文件。 只需一次添加一行您想省略的文件。 SharedAssets 和其他非资产文件夹文件通常可以省略,并且会在编辑器中自动重新填充(可以重新导入包等)。 您还可以使用通配符来排除文件类型。
如果其他人正在使用您的 GitHub 存储库并且您想要克隆或拉取,您也可以在 GitHub 桌面或 Git bash 上使用这些选项。
我没有过多提及您可以在编辑器中使用 GitHub 的 Unity GitHub 包,因为我个人认为该界面不是很有用,而且我认为总体上它不会帮助任何人熟悉 git,但这只是我的偏爱。
我建议您制作一个 .gitignore 文件,其中包含资产文件夹以外的所有内容(最初位于统一项目中的所有其他文件)。 接下来,您应该将所有游戏项目放在一个文件夹中。 接下来,为您的游戏在每个项目文件夹中复制 .gitignore。 这将排除项目中除资产之外的库和不必要的文件夹。 如果你有任何你不想要的项目,那么把它们放在一个新的 .gitignore 里面,你的游戏项目存储在那里。 注意:您可以有多个 .gitignore 并且 .gitignore 基于相对路径。 我希望有帮助!
我和我的朋友在 72 小时游戏果酱中尝试了这种方法,请注意他们不知道 GIT。
首先,我在 [GitHub][1](私有仓库现在免费)中创建空仓库,使用预定义的.gitignore统一模板,它应该与此相同:
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
#
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Mm]emoryCaptures/
# Asset meta data should only be ignored when the corresponding asset is also ignored
!/[Aa]ssets/**/*.meta
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Builds
*.apk
*.unitypackage
# Crashlytics generated file
crashlytics-build.properties
然后我创建了一个主场景,这个场景在开发过程中不应该被任何人修改,它应该是团队中所有开发人员和美工测试游戏最新功能的演示场景。 首先,任何新功能都应该在与 main 分开的分支中,每个团队成员都有自己的场景,他用它来进行测试和开发。 一旦一切顺利,他/她就会提出由其他成员审查的 PR。 如果合并功能完成,那么我们将其添加到主场景中,以便所有其他成员看到影响和进度。
关于艺术文件,最好通过改变精灵文件来避免冲突,并用来自 PR 的全新调整过的精灵替换主要精灵。 [1]: https : //github.com/
一般有两种情况。 第一种情况是你没有本地的Unity项目,想新建一个带有git源码控制的Unity项目。 第二种情况是您已经有一个本地 Unity 项目,并且想要将该本地 Unity 项目上传到 github。 以下步骤将准确显示如何在这两种情况下执行此操作。
第1步
如果您想创建一个新的 Unity 项目,请像往常一样在您的机器上本地创建一个。 如果您已有本地 Unity 项目,请跳过此步骤。
第2步
转到您的 github.com 网站主页,并创建一个与您本地 Unity 项目同名的存储库。 创建时不要添加任何内容,只需取消选中所有选项即可。
第 3 步
将 Unity .gitignore
文件添加到本地 Unity 项目的根文件夹中。 你可以在这里找到.gitignore
文件https://github.com/github/gitignore/blob/master/Unity.gitignore 。
第四步
打开终端,使用几个cd
命令转到本地 Unity 项目的根文件夹。
第 5 步
在终端中,使用以下公式输入命令:
git remote add origin git@github.com:<your-github-username>/<your-repository-name>.git
git branch -M <main-branch-name>
git push -u origin <main-branch-name>
例如,如果您的 github 用户名是elonmusk007
,您的存储库名称是FlyToMars
并且您的主分支名称是main
(默认情况下),则命令应该是:
git remote add origin git@github.com:elonmusk007/FlyToMars.git
git branch -M main
git push -u origin main
现在,一切都已设置完毕,您可以将此 Unity 项目用作普通的 git 项目。
如果您使用源代码管理,请确保您有一个 git 忽略无用文件: https://github.com/github/gitignore/blob/main/Unity.gitignore
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.