如何使用Git的Unity3D源代码pipe理?

在Unity 3D中使用Git源代码控制的最佳实践是什么,特别是在处理Unity 3D项目的二进制本质时? 请描述工作stream程,在.gitignore中包含哪些path,应该在Unity和/或项目中设置什么设置,以及其他需要注意的特殊事项。

注:我意识到使用资产服务器是Unity推荐的方式,但是我想使用Git有各种各样的原因。 请不要回答那个状态或者说我应该只使用资产服务器。 资产服务器真的不适合我。

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

与3D游戏一起使用Git

2015年10月更新: GitHub已经发布了一个名为Git LFS的插件,直接处理下面的问题。 您现在可以轻松高效地版本大型二进制文件!

Git可以和3D游戏一起使用。 然而,这里主要的警告是,随着您的提交历史的膨胀,版本控制大(> 5 MB)的媒体文件可能会成为一个长期的问题。 我们已经在我们的项目中解决了这个潜在的问题,只有在认为是最终的时候才对二元资产进行版本pipe理 我们的3D艺术家使用Dropbox来处理WIP资产,这是出于上述原因,因为它更快更简单(不是很多艺术家会积极使用Git!)。

Git工作stream程

您的Git工作stream程非常重要,您需要根据自己作为一个团队的经验以及您如何一起工作来自行决定。 然而。 我会强烈推荐这个原作者在这里描述的适当命名的Git Flow方法。

在这里,我不会过多地深入研究这个方法是如何工作的,因为作者完整地描述了这个方法,用很less的话来说也很容易。 我已经和我的团队一起使用了一段时间,这是迄今为止我们尝试过的最好的工作stream程。

Git GUI客户端应用程序

这真是个人喜好,因为在Git GUI方面有很多select,或者根本就不用GUI。 但我想build议免费的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 

Unity3D设置

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

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

希望您将现有的回购迁移到LFS?

看看我的博客文章, 了解如何在这里做的步骤。

其他configuration

在Git和Unity3D项目中使用less数几个主要的烦恼之一就是Git不关心目录,并且在将文件从文件中删除之后很乐意留下空的目录。 Unity3D将为这些目录制作* .meta文件,并且当Git提交不断添加和删除这些元文件时,可能会导致团队成员之间的战斗。

将这个Git合并后的钩子添加到/.git/hooks/文件夹中,其中包含Unity3D项目的仓库。 在任何Git拉/合并后,它会查看哪些文件已被删除,检查它存在的目录是否为空,如果删除。

在Unity 4.3中,你还必须从首选项中启用External选项,但是从Unity 4.5开始,他们放弃了选项,所以完整的设置过程如下所示:

  1. Editor → Project Settings → Editor → Version Control Mode切换到Visible Meta Files Editor → Project Settings → Editor → Version Control Mode
  2. Editor → Project Settings → Editor → Asset Serialization Mode切换到Force Text Editor → 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 

请注意,您需要保持在源代码控制下的唯一文件夹是“ Assets和“ ProjectSettings

有关在源代码控制下保存Unity Project的更多信息,请参阅本文 。

什么是GIT?

Git是由Linus Torvalds于2005年(Linux操作系统创始人)开发的免费的开源分布式版本控制系统(SCM)。 它被创build来控制从小到大的项目,速度和效率的一切。 谷歌,Facebook,微软等领先企业每天都使用GIT。

如果你想了解更多关于GIT的信息,请查看这个快速教程 ,

首先确保你已经build立了你的Git环境。你需要设置你的本地环境和一个Git仓库(我更喜欢Github.com)。

GIT客户端应用程序Mac / Windows

对于GIT gui客户端应用程序,我build议您使用Github.com,

GitHub是与朋友,同事,同学以及陌生人分享代码的地方。 超过500万人使用GitHub来共同构build令人惊叹的事物。

Unity3d设置

你需要做这些设置

在编辑→项目设置→编辑器→版本控制模式中切换到可见元文件。

在这里输入图像描述

在Unity→Preferences→Packages→Repository中启用外部选项

在这里输入图像描述

在编辑→项目设置→编辑器→资产序列化模式中切换到强制文本。

在这里输入图像描述

来源: 使用Git与3D游戏来源控制

要说明的一切,它也是使用Unity的git lfs的理想select。 自从它出来以来,我一直在使用它,并没有任何麻烦。

您将需要在您的.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 

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

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

我想我可能会发布一个更简单的.gitignore感兴趣的人:

 # Ignore Everything /* # Except for these: !/.gitignore !/Assets !/ProjectSettings 

Edit -> Project Settings -> Editor

将版本控制设置为元文件。 设置资产序列化强制文本。

我想这是你想要的。

只有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/ 

我们现在有了与Github到Unity的无缝整合。https://unity.github.com/

新的GitHub for Unity扩展带来的GitHub工作stream程和更多的Unity,提供支持Git LFS和文件locking的大型文件。

在写这篇文章的时候,这个项目是用alpha编写的,但是仍然可以用于个人项目。

Unity也提供自己的Source版本控制。 在unity5之前它是unityAsset服务器,但现在它折旧了。 并推出了一个新的SVN控制系统统一协作,但使用统一和任何SVN的主要问题是提交和合并场景。 但svn的non给我们的方式来解决这种冲突或合并的场景。 所以要依靠你所熟悉的SVN。 我在Mac上使用SmartSVN工具。 和乌龟在窗户上。

在这里输入图像描述

使用git进行unity-3d源码版本控制时要记住的主要事项:

(A) 不要签入库文件夹 。 我曾经多次犯过这个错误,并为此而受苦! 在将项目/文件添加到git之前删除或移出库文件夹。

(二)使用“可见的元文件” – 最新的统一版本 – 5.3.4及以上这是默认情况下发生的。 对于某些早期版本,您需要更改“编辑” – >“项目设置” – >“版本控制”下的设置

(C)使用Unity的.gitignore文件来确保维持清晰,并且不会不必要地添加文件 – 如果在android / tizen上 – 添加规则以排除将APK和TPK文件添加到存储库。 谷歌周围一个.gitignore文件的统一或者使用这个模型.gitignore由GitHub提供的统一: https : //github.com/github/gitignore/blob/master/Unity.gitignore

(D)确保.gitignore文件作为第一个文件被添加到版本库 – 因为在过去,我个人错过了添加.gitignore文件。 事后思考这件事发生了很多想法 – 但现在我只是复制并添加.gitignore文件作为设置存储库的第一步。

所以…要让Unity项目为git做好准备,请执行以下操作:

(1)转到项目文件夹

(2)inputgit init。

(3)复制.gitignore文件:在MacOS上:cp〜/ Downloads / .gitignore在Windows上:复制c:\ Users [yourusername] \ Downloads.gitignore。

(4)git add .gitignore

(5)git add *

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