如何使用Git进行Unity3D源代码控制?

Pre*_*ays 478 git version-control unity-game-engine

使用Unity 3D的Git源代码控制的最佳实践是什么,特别是在处理Unity 3D项目的二进制特性时?请描述工作流程,.gitignore中将包含哪些路径,应在Unity和/或项目中设置哪些设置,以及应注意的任何其他特殊事项.

注意:我意识到使用资产服务器是Unity推荐的方式,但我想出于各种原因使用Git.请不要说明我应该使用资产服务器的答案.资产服务器真的不适合我.

S.R*_*ond 503

以下是我个人博客的摘录.

将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文件,没有操作系统细节.

# =============== #
# 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
Run Code Online (Sandbox Code Playgroud)

Unity3D设置

对于Unity 3D v4.3及更高版本:

  1. (在v4.5及更高版本中跳过此步骤)启用External选项Unity ? Preferences ? Packages ? Repository.
  2. 打开Edit菜单并选择Project Settings ? Editor:
    1. 切换Version Control ModeVisible Meta Files.
    2. 切换Asset Serialization ModeForce Text.
  3. File菜单中保存场景和项目.

您想将现有仓库迁移到LFS吗?

查看我的博客文章,了解如何在此处执行此操作的步骤.

附加配置

使用Git和Unity3D项目的几个主要烦恼之一是Git不关心目录,并且在从它们中删除文件后会愉快地留下空目录.Unity3D将为这些目录制作*.meta文件,当Git提交不断添加和删除这些元文件时,可能会导致团队成员之间发生争执.

将此Git合并后挂钩添加/.git/hooks/包含Unity3D项目的存储库的文件夹中.在任何Git pull/merge之后,它将查看已删除的文件,检查它所在的目录是否为空,如果是,则删除它.

  • 自Unity 4.3以来,始终会创建元文件.该设置仅控制文件是否获得隐藏属性/标志.Git并不关心元文件是否被隐藏,甚至不会保留标志.为了减少混淆和冲突的可能性,让Unity更容易使用可见的元文件. (14认同)
  • 我们使用[git-annex](http://git-annex.branchable.com/)来管理我们的大型二进制内容.Windows支持不是[awesome](http://git-annex.branchable.com/todo/windows_support/),但它正在变得更好.这只有在您不关心跟踪大型二进制文件中的转速时才有用. (3认同)
  • 提到git工作流程很不错,但也许我应该在我的问题中澄清我要求的工作流程特别针对统一3D.您可能知道,Unity项目严重依赖于二进制文件.有什么特殊的考虑因素可以解决这个问题吗?我在研究这个主题时发现的一些建议是使用尽可能避免合并的工作流程.也许你不同意这种情绪,但我的问题更具体针对unity3d特定问题而不是一般工作流程偏好. (2认同)
  • 对此的更新 - 我们尝试了您的设置并且它运行良好,但我们希望我们的资产自动同步.我们现在使用sugarsync选择性地同步二进制资产文件夹.Dropbox只会同步Dropbox文件夹,但是通过糖同步,您可以随意在硬盘驱动器上的任何位置同步文件夹,这非常有用.我们不得不更改我们的Assets目录结构,为这些大型二进制文件定义一个子文件夹,但到目前为止它已经运行得很好.我们只是.gitignore该文件夹并允许糖同步以保持同步. (2认同)
  • 为什么选择"隐藏元文件"? (2认同)
  • 修复了我的副本n粘贴错误 - 是的它应该是可见的元文件. (2认同)

zas*_*nyy 56

在Unity 4.3中,您还必须从首选项中启用"外部"选项,但是从Unity 4.5开始,它们会删除选项,因此完整的设置过程如下所示:

  1. 切换到Visible Meta FilesEditor ? Project Settings ? Editor ? Version Control Mode
  2. 切换到Force TextEditor ? Project Settings ? Editor ? Asset Serialization Mode
  3. 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
Run Code Online (Sandbox Code Playgroud)

请注意,您需要在源代码管理下保留的唯一文件夹是AssetsProjectSettings.

有关将Unity Project保留在源代码管理下的更多信息,请参阅此文章.

  • 为什么选择"隐藏元文件"? (6认同)

Nab*_*eem 33

什么是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游戏源控制

  • +1这个答案已经在上面写了但是@NabeelSaleem回答帮助我提供了他提供的图像和明确指南:)谢谢 (6认同)
  • @NabeelSaleem是的.实际上,Unity 5.x中的这一步不是必需的.TY (5认同)
  • 我在Unity 5.x Normal中找不到`Preferences> Packages`吗?ty (3认同)

ryg*_*go6 19

要添加到所述的所有内容,它也适用于使用Unity的git lfs.我一直在使用它,因为它出来了,它没有遇到麻烦.

您需要在.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
Run Code Online (Sandbox Code Playgroud)

那是我的滚动文件列表.如果您使用其他二进制文件而不是列表,请添加它们.

我也有配置为使用yamlmerge的文件,你需要设置它.你可以在这里阅读:http://docs.unity3d.com/Manual/SmartMerge.html


Get*_*awn 9

我想我可能会对.gitignore任何有兴趣的人发布更简单的内容:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Run Code Online (Sandbox Code Playgroud)

  • 同样,所有这些答案都在这个页面上过时了.如果由于某种原因你必须使用Unity的git,https://github.com/github/gitignore/blob/master/Unity.gitignore (6认同)

Bhu*_*pen 8

我们现在可以与Github和Unity扩展无缝集成到一起... https://unity.github.com/

新的GitHub for Unity扩展为GitHub带来了更多工作流程,为Git LFS和文件锁定提供了大文件支持.

在撰写本文时,项目采用alpha格式,但仍可用于个人项目.


Kyl*_*e B 7

您可以使用Github for Unity,这是一个Unity 扩展,可将 git 工作流带入 Unity 的 UI。

Github for Unity刚刚发布了该扩展的 1.0 版。


小智 6

只有AssetsProjectSettings文件夹需要在 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/
Run Code Online (Sandbox Code Playgroud)


afp*_*pro 5

Edit -> Project Settings -> Editor

将Version Control设置为元文件.设置资产序列化以强制文本.

我想这就是你想要的.


小智 5

Unity 还提供了自己的 Source 版本控制。在 unity5 之前,它是 unityAsset Server,但现在已贬值。并推出了一个新的 SVN 控制系统,称为统一协作。但使用统一和任何 SVN 的主要问题是提交和合并场景。但是非 svn 给了我们解决这种冲突或合并场景的方法。所以取决于你熟悉哪个SVN。我在 Mac 上使用 SmartSVN 工具。和窗户上的乌龟。

在此处输入图片说明


小智 5

使用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*

希望这有助于......一切顺利!


Nip*_*vid 5

我更希望您使用BitBucket,因为它不是公开的,而且Unity上有关于Bitbucket的官方教程。

https://unity3d.com/learn/tutorials/topics/cloud-build/creating-your-first-source-control-repository

希望这可以帮助。