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

注意:我知道使用资产服务器是unity推荐的方式,但出于各种原因,我想使用Git。请不要回答,状态或争论,我应该只是使用资产服务器。资产服务器真的不是我的选择。


当前回答

只是补充一下吉提诺的主题。 推荐的方法只忽略Library和Temp,如果它在你的git项目的根目录内。如果你像我一样,有时需要统一项目成为回购的一部分,而不是整个回购,gitignore中正确的字符串将是:

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

其他回答

我想添加一个非常简单的工作流程,它来自于曾经对git感到沮丧的人。git有几种使用方式,可能最常见的unity是GitHub Desktop, git Bash和GitHub unity

https://assetstore.unity.com/packages/tools/version - control/github -团结- 118069。

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

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

如果你不想安装lfs,不管什么原因,你可以扫描你的项目文件> 128mb在windows通过键入大小:大在你有你的项目的目录。这对于搜索大文件非常方便,尽管可能会漏掉一些100mb到128mb之间的文件。

git bash的一般格式是

Git添加。(添加要提交的文件)

Git commit -m 'message'(提交带有消息的文件,它们仍然在你的PC上,而不是在远程repo中,基本上它们已经被“版本化”为新的提交)

Git推送(将文件推送到存储库)

git bash对于unity项目的缺点是,如果有一个> 100mb的文件,你不会得到一个错误,直到你推送。然后,您必须通过将头部重置到上一次提交来撤销您的提交。有点麻烦,特别是如果你是git bash的新手。

GitHub桌面的优势是,在你提交100mb的文件之前,它会给你一个弹出的错误消息。然后可以收缩这些文件或将它们添加到.gitignore文件中。

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

如果其他人正在使用你的GitHub回购,你想克隆或拉你有这些选项可供你以及在GitHub桌面或Git bash。

我没有提到太多关于Unity GitHub包,你可以在编辑器中使用GitHub,因为我个人认为界面不是很有用,我不认为总体上它会帮助任何人熟悉git,但这只是我的偏好。

我想我可以发布一个更简单的。gitignore给感兴趣的人:

# Ignore Everything
/*

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

以下是我个人博客的节选。

使用Git与3D游戏

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

Git可以很好地处理3D游戏。然而,这里主要的警告是,版本控制大型(>5 MB)媒体文件可能是一个长期的问题,因为您的提交历史会膨胀。我们已经在我们的项目中解决了这个潜在的问题,只有在二进制资产被认为是最终的时候才对它进行版本控制。我们的3D美工使用Dropbox来处理在制品资产,既是出于上述原因,也是因为它更快更简单(没有多少美工会主动使用Git!)

总Workflow

你的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

Unity3D设置

对于Unity 3D v4.3及以上版本:

(在v4.5及以上版本跳过此步骤)在Unity中启用外部选项→首选项→包→存储库。 打开编辑菜单,选择项目设置→编辑器: 切换版本控制模式为可见元文件。 将资产序列化模式切换为强制文本。 从文件菜单中保存场景和项目。


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

请查看我的博客文章,了解如何做到这一点。

额外的配置

在Unity3D项目中使用Git的一个主要问题是Git不关心目录,并且在删除文件后会很高兴地留下空目录。Unity3D将生成*。当Git不断添加和删除这些元文件时,可能会导致团队成员之间的战斗。

将这个Git post-merge钩子添加到/。git/hooks/文件夹用于包含Unity3D项目的存储库。在任何Git拉/合并之后,它都会查看哪些文件被删除了,检查文件所在的目录是否为空,如果是,就删除它。

除此之外,在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

我们现在有无缝集成到unity与Github到unity扩展… https://unity.github.com/

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

在撰写本文时,该项目仍处于alpha阶段,但仍可用于个人项目。