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

时间:2013-08-14 06:57:27

标签: git unity3d version-control

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

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

16 个答案:

答案 0 :(得分:486)

以下内容摘自my personal blog

将Git与3D游戏结合使用

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

Git可以正常使用3D游戏。然而,这里的主要警告是,随着您的提交历史膨胀,版本化大型(> 5 MB)媒体文件可能是长期问题。我们已经在我们的项目中解决了这个潜在的问题,因为它只考虑了二进制资产的最终版本。我们的3D艺术家使用Dropbox来处理WIP资产,这两者都是出于上述原因,因为它的更多更快更简单(没有多少艺术家会主动想要使用Git!)。

Git工作流程

根据您自己的团队经验以及您如何一起工作,您的Git工作流程是您需要自行决定的。然而。我强烈推荐使用适当命名的 Git Flow 方法as described by the original author here

我不会在这里深入探讨这种方法的工作原理,因为作者完美地描述了这种方法,并且很少用语言也很容易理解。我已经和我的团队一起使用了一段时间,这是我们迄今为止尝试过的最佳工作流程。

Git GUI客户端应用程序

这实际上是个人偏好,因为在Git GUI方面有很多选择,或者根本不使用GUI。但我想建议免费SourceTree application,因为它完全插入Git Flow扩展。阅读有关在其应用程序中实施Git Flow方法的SourceTree tutorial here

Unity3D忽略文件夹

对于没有操作系统细节的最新版本结帐Github maintained Unity.gitignore file

# =============== #
# 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及更高版本中跳过此步骤)在External中启用Unity → Preferences → Packages → Repository选项。
  2. 打开Edit菜单,然后选择Project Settings → Editor
    1. Version Control Mode切换为Visible Meta Files
    2. Asset Serialization Mode切换为Force Text
  3. File菜单中保存场景和项目。

  4. 您是否希望将现有仓库迁移到LFS?

    查看我的博文,了解步骤on how to do it here

    附加配置

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

    对于包含Unity3D项目的存储库,

    Add this Git post-merge hook/.git/hooks/文件夹。在任何Git pull / merge之后,它将查看已删除的文件,检查它所在的目录是否为空,如果是,则删除它。

答案 1 :(得分:55)

在Unity 4.3中,您还必须从首选项中启用“外部”选项,但是自Unity 4.5以来,他们为此删除了选项,因此完整的设置过程如下所示:

  1. 切换到Visible Meta Files
  2. 中的Editor → Project Settings → Editor → Version Control Mode
  3. 切换到Force Text
  4. 中的Editor → Project Settings → Editor → Asset Serialization Mode
  5. File菜单
  6. 保存场景和项目

    我们的团队也在使用更加扩展的.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
    

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

    有关将Unity Project置于源代码管理之下的更多信息,请参阅this post

答案 2 :(得分:31)

什么是GIT?

Git是一个免费的开源分布式版本控制系统(SCM),由Linus Torvalds于2005年开发(Linux OS创始人)。它的创建是为了控制从小到大的项目,速度和效率。谷歌,Facebook,微软等领先公司每天都使用GIT。

如果您想了解有关GIT的更多信息,请查看此Quick tutorial

首先确保您已经设置了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

来源: Using Git With 3D Games Source Control

答案 3 :(得分:19)

要添加所说明的所有内容,将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

答案 4 :(得分:9)

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

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings

答案 5 :(得分:7)

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

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

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

答案 6 :(得分:5)

Edit -> Project Settings -> Editor

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

我认为这就是你想要的。

答案 7 :(得分:5)

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

(A)不要签入图书馆文件夹。我过去曾多次犯过这个错误,并为此而受苦! 在将项目/文件添加到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 *

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

答案 8 :(得分:5)

我更愿意使用BitBucket,因为它不公开,Unity在Bitbucket上有一个官方教程。

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

希望这会有所帮助。

答案 9 :(得分:4)

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

答案 10 :(得分:4)

您可以使用 Github for Unity (一种 Unity扩展),它将git工作流引入Unity的UI。

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

答案 11 :(得分:2)

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

enter image description here

答案 12 :(得分:0)

只需添加Gitignore的子喷气机即可。 推荐的方法只忽略Library和Temp,如果它是您git项目的根。如果您和我一样,并且有时需要一个统一的项目作为存储库的一部分,而不是整个存储库,则gitignore中的正确字符串将是:

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild

答案 13 :(得分:0)

我想从以前对git感到沮丧的人那里添加一个非常简单的工作流程。有几种使用git的方法,可能最常见的统一方法是GitHub Desktop,Git Bash和GitHub Unity

https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069

从本质上讲,他们都做相同的事情,只是用户选择。您可以使用git进行大文件设置,该设置允许1GB免费大文件存储以及数据包中额外的存储空间,价格为$ 4 / mo,50GB,这将允许您将大于100mb的文件推送到远程存储库(它将实际文件存储在服务器,并在您的存储库中找到一个指针)

https://git-lfs.github.com/

如果出于任何原因不想设置lfs,则可以在项目所在的目录中键入size:large来扫描Windows中大于128 mb的文件。尽管可能会丢失一些介于100mb和128mb之间的文件,这对于搜索大文件可能非常方便。

enter image description here

git bash的一般格式为

git add。 (添加要提交的文件)

git commit -m'message'(使用消息提交文件,它们仍然在您的PC上,而不是在远程仓库中,基本上它们已被“版本化”为新的提交)

git push(将文件推送到存储库)

git bash对于统一项目的缺点是,如果文件> 100mb,则在推送之前不会出现错误。然后,您必须通过将头部重置为上一个提交来撤消提交。有点麻烦,特别是如果您是git bash的新手。

GitHub Desktop的优点是,在提交100mb的文件之前,它会弹出错误消息。然后,您可以缩小这些文件或将它们添加到.gitignore文件中。

要使用.gitignore文件,请在本地存储库根目录中创建一个名为.gitignore的文件。您只需一次省略一行就添加文件。通常可以省略SharedAssets和其他非资产文件夹文件,它们会在编辑器中自动重新填充(可以重新导入包等)。您还可以使用通配符排除文件类型。

如果其他人正在使用您的GitHub存储库,而您想克隆或提取,则在GitHub桌面或Git bash上也可以使用这些选项。

我没有提到太多关于Unity GitHub软件包的信息,您可以在编辑器中使用GitHub,因为就我个人而言,我并不觉得该界面非常有用,而且我认为总体而言它不会帮助任何人熟悉git,但这只是我的偏爱。

答案 14 :(得分:0)

我建议您制作一个.gitignore文件,其中包含资产文件夹以外的所有内容(所有其他文件最初位于unity项目中)。接下来,您应该将所有游戏项目放在一个文件夹中。接下来,在游戏的每个项目文件夹中复制.gitignore。这将排除项目中资产以外的库和不必要的文件夹。如果有不需要的项目,则将它们放入存储游戏项目的新.gitignore文件中。注意:您可以有多个.gitignore和.gitignore基于相对路径。希望对您有所帮助!

答案 15 :(得分:0)

我和我的朋友在 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/