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

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及更高版本:

  • (在v4.5及更高版本中跳过此步骤)在Unity → Preferences → Packages → Repository中启用External选项。
  • 打开Edit菜单并选择Project Settings → Editor

  • Version Control Mode切换为Visible Meta Files
  • Asset Serialization Mode切换为Force Text
  • File菜单中保存场景和项目。
  • 您想将现有仓库迁移到LFS吗?

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

    附加配置

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

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


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

  • 切换到Editor → Project Settings → Editor → Version Control Mode中的Visible Meta Files
  • Editor → Project Settings → Editor → Asset Serialization Mode中切换到Force Text
  • File菜单中保存场景和项目
  • 我们的团队也在使用更多扩展的.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

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

    有关将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设置

    您需要进行这些设置

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

    enter image description here

    在Unity→首选项→包→存储库中启用外部选项

    enter image description here

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

    enter image description here

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


    要添加到所述的所有内容,将git lfs与Unity一起使用也是理想的选择。我一直在使用它,因为它出来了,我没有遇到它。

    您需要在.gitignore文件旁边添加此.gitattributes

    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


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

    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 *

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


    Edit -> Project Settings -> Editor

    将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工具。和乌龟在窗户上。

    enter image description here


    只需加入Gitignore的子喷气机。
    如果你的git项目的wihtin根目录,推荐的方法只会忽略Library和Temp。如果你像我一样,有时需要统一项目成为回购的一部分,而不是整个回购,gitignore中的正确字符串将是:

    1
    2
    3
    **/[Tt]emp
    **/[Ll]ibrary
    **/[Bb]uild