如何将Git用于Unity3D源代码管理?


499

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

注意:我意识到使用Asset Server是Unity推荐的方式,但是出于多种原因,我想使用Git。请不要说出任何答案,也不要说我应该只使用资产服务器。资产服务器确实不是我的选择。


3
不管无意义的git V svn参数如何,都“只使用svn”,git不适用于大型二进制文件。统一项目是电影(以及各种巨大的二进制文件-纹理等),带有少量代码行。您会使用git来存储电影收藏吗?svn至少是合理的。
Fattie

1
最简单的解决方案是仅使用gitignore排除所有二进制文件夹,并且仅将git用于实际的代码文件,甚至可能用于资产文件。不需要包含所有二进制文件,因为每个团队成员都可以自己编译它们?
Kokodoko

@Kokodoko艺术家无法编译自己的可执行文件。
Crashworks 2015年

即使这是真的,他们仍然可以将新的图像资产推送到git ...,以便开发人员可以使用新的艺术品进行编译...
Kokodoko

@Kokodoko这意味着艺术家需要等待开发者才能看到提交并进行构建,以查看他们在游戏中的更改。那是一个很长的迭代时间。
Crashworks

Answers:


522

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

在3D游戏中使用Git

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扩展插件一起插入。在此处阅读有关在其应用程序中实现Git Flow方法的SourceTree教程

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

要将现有的回购迁移到LFS吗?

在这里查看我的博客文章以获取有关如何执行此操作的步骤。

附加配置

在Unity3D项目中使用Git的主要烦恼之一是Git不在乎目录,并且从其中删除文件后会很乐意将空目录留在身边。Unity3D将为这些目录创建* .meta文件,当Git承诺不断添加和删除这些元文件时,Unity3D可能在团队成员之间引起一场争斗。

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


2
提到git工作流程很不错,但是也许我应该在我要问的问题中澄清有关统一3D的工作流程。如您所知,统一项目在很大程度上依赖于二进制文件。有什么特殊的考虑要处理吗?在研究此主题时,我发现一些建议是使用尽可能避免合并的工作流。也许您不同意这种观点,但是我的问题是针对unity3d特定问题的,而不是针对一般工作流程偏好的。
PressingOnAlways

3
我们使用git-annex来管理大型二进制内容。Windows的支持是不是真棒,但它越来越好。仅当您不关心在大型二进制文件中跟踪转速时,这才有用。
Jerdak

2
对此进行了更新-我们尝试了您的设置,效果很好,但是我们希望资产能够自动同步。现在,我们使用sugarsync选择性地同步二进制资产文件夹。Dropbox仅会同步Dropbox文件夹,但是使用Sugar同步,您可以在硬盘驱动器上的任何位置任意同步文件夹,这非常有用。我们必须稍微更改Assets目录结构,才能为这些大型二进制文件定义一个子文件夹,但到目前为止,它确实运行良好。我们只是.gitignore该文件夹,并允许Sugar同步使其保持同步。
PressingOnAlways

2
为什么要选择Hidden Meta Files
Slipp D. Thompson 2014年

2
修复了我的复制n粘贴错误-是的,它应该是可见的元文件。
S.Richmond 2014年

60

在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

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

有关在源代码控制下保持Unity项目的更多信息,请参见 本文中


如果您在顶部编辑我的答案以包括这些新选项,可能会更好。:)
S.Richmond 2014年

6
为什么要选择Hidden Meta Files
Slipp D. Thompson 2014年

第一点显然是错误的。没有Unity→首选项→软件包→存储库
Agostino,2014年

1
根据docs.unity3d.com/Manual/…应该是可见的元文件
Markus

1
对我的团队来说效果很好。非常感谢你。
eifersucht 2015年

34

什么是GIT?

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

如果您想了解有关GIT的更多信息,请查看此快速教程

首先,请确保已设置Git环境。您需要同时设置本地环境和Git存储库(我更喜欢Github.com)。

GIT客户端应用程序Mac / Windows

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

GitHub是与朋友,同事,同学和完全陌生的人共享代码的地方。超过500万人使用GitHub共同构建了惊人的东西。

Unity3d设置

您需要进行这些设置

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

在此处输入图片说明

在Unity→偏好设置→软件包→存储库中启用外部选项

在此处输入图片说明

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

在此处输入图片说明

来源: 将Git与3D游戏一起使用源代码控制


6
+1这个答案已经在上面写了,但是@NabeelSaleem答案帮助我提供了他提供的图像和清晰的指南:)谢谢
aflatoon 2014年

3
Preferences > Packages在Unity 5.x Normal中找不到?ty
Yves Lange

5
@NabeelSaleem是的。实际上,Unity 5.x中的此步骤不是必需的。ty
Yves Lange

22

要添加所有内容,最好在Unity中使用git lfs。自问世以来我一直在使用它,我对此没有任何问题。

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

*.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


11

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

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

在撰写本文时,该项目为Alpha版本,但仍可用于个人项目。


你尝试过这个吗?
Nabeel K,

11

我认为我可以.gitignore为感兴趣的任何人发布一个简单的文章:

# Ignore Everything
/*

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

7
同样,所有这些答案在此页面上都已过时。如果由于某种原因,你不得不使用git与团结,github.com/github/gitignore/blob/master/Unity.gitignore
Fattie

小型,简单且与所有版本完全兼容:即使对于最近更改了项目结构(UnityPackageManager/Packages/)的Unity 2017和2018,我发现此脚本的效果也最佳。
艾萨克·埃里克森

8

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

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

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

(C)为Unity使用.gitignore文件-确保保持理智并且不会不必要地添加文件 -如果在android / tizen上-添加规则以将APK和TPK文件排除在添加到存储库之外。Google围绕着一个.gitignore文件以实现统一,或者使用此模型.gitignore for GitHub提供的Unity: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 [您的用户名] \ Downloads.gitignore。

(4)git添加.gitignore

(5)git添加*

希望这对您有所帮助...


6

Edit -> Project Settings -> Editor

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

我想这就是你想要的。


1
然后如何设置YAML合并?
shinzou



5

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

3

Unity还提供自己的Source版本控件。在unity5之前,它是unityAsset Server,但现在已贬值。并启动了一种称为unity合作的新SVN控制系统。但是使用unity和任何SVN的主要问题是提交和合并场景。但是svn的Non提供了解决这种冲突或合并场景的方式。因此,取决于您熟悉的SVN。我在Mac上使用SmartSVN工具。和乌龟在窗户上。

在此处输入图片说明


1

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

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

0

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

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

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

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

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

在此处输入图片说明

git bash的一般格式是

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

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,但这只是我的想法。偏爱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.