Unity & git:多项目结构和符号链接,更好的解决方案?



我正在处理在单独的 git 存储库中具有公共资产的大型项目。我们简要地设置项目的方式是这样的:

/

# 主 Unity 项目/ext/Common# 公共源 Unity 项目
(使用 git 子树或子模块签入(

公共包含资源文件夹,就像任何 Unity 项目一样

/ext/Common/Assets象征性地与/Assets/Externals/Common联系在一起

我们编写了 git 签出后钩子/Assets/Externals/用于检查包含 Assets 子文件夹的每个/ext/目录是否存在链接。

这工作正常,但存在一些困境:
A(我们在团队中使用不同的Windows版本和OSX。我们需要跨平台的方式来编写结帐后的脚本。因此依赖于 python。
B( Git 签出后钩子不会在 git 拉取后触发,这将是最佳的。
C( Git 签出后钩子需要写在存储库中,我唯一能做到这一点的方法就是推送到存储库中的某个位置并修改 git 配置 git-hook 路径。

我考虑过用Unity AssetPostprocess::OnPreprocessAsset替换git post-checkout钩子。但是,需要注意的是,它不会在新的结帐时触发,因为项目脚本尚未编译,并且由于符号链接尚未形成,Unity 中缺少脚本......不是一件好事。

你能想到什么替代方案来克服A(,B(,C(问题?有更好的 git 钩子吗?您知道如何避免多个项目的混乱吗?

我们以类似的方式使用了 git 子模块,但没有使用符号链接。git 子模块已签出到<Unity project>/Assets/Common中。没有结帐后的钩子,也没有跨平台的问题,但是我们团队的一些成员(主要是设计师(在没有从命令行显式执行子模块更新的情况下,在获取最新版本的子模块时遇到了麻烦。事实证明,这对他们来说非常令人沮丧,以至于我们决定不再使用它(即使我喜欢它(。

我无法对@frankhermes的帖子发表评论。

我知道旧线程,但它可能会帮助其他人。

您可以使用编辑器脚本创建 MenuItem for Unity 轻松获取最新的子模块版本,编辑器脚本可以通过 Process API 使用固定命令调用 cmd,或者集成允许您执行相同操作的 .net git 库。

当我完成对更新 package.json 的较新版本的更改并创建我应该上传到内部 npm 服务器的存档时,使用相同的概念在 Unity 中生成版本化包。显然,自定义包在 2018 年可能不是一个考虑因素,但至少,Process API 仍然可以通过编辑器脚本访问。

最新更新