统一及;git:多项目结构和符号链接,更好的解决方案?

统一及;git:多项目结构和符号链接,更好的解决方案?,git,unity3d,Git,Unity3d,我正在处理在单独的git存储库中具有公共资产的大型项目。我们如何简单地设置项目是: /#主要联合项目 /ext/Common#公共源代码统一项目(使用git子树或子模块签入) 与任何unity项目一样,Common包含资产文件夹 /ext/Common/Assets是符号链接到/Assets/Externals/Common 我们编写了git post checkout钩子,用于检查/Assets/Externals/下包含Assets子文件夹的每个目录是否存在/ext/链接 这是可行的,但也存

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

/
#主要联合项目
/ext/Common
#公共源代码统一项目(使用git子树或子模块签入)

与任何unity项目一样,Common包含资产文件夹

/ext/Common/Assets
是符号链接到
/Assets/Externals/Common

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

这是可行的,但也存在一些困境:
A) 我们在团队中使用不同的windows版本和OSX。我们需要跨平台的方式来编写签出后脚本。因此依赖于python。
B) Git签出后钩子不会在Git pull后触发,这将是最佳选择。
C) Git签出后钩子需要写在存储库中,实现这一点的唯一方法是将其推送到存储库中的某个位置,并修改Git config Git钩子路径

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


你能想出什么替代方案来解决A)、B)、C)问题?有更好的git钩子吗?您知道如何避免多个项目出现这种混乱吗?

我们以类似的方式使用git子模块,但不使用符号链接。git子模块已签出到
/Assets/Common
中。没有签出后挂钩,也没有跨平台问题,但是我们团队的一些成员(主要是设计师)在没有从命令行显式地更新子模块的情况下,很难获得最新版本的子模块。这对他们来说太令人沮丧了,以至于我们决定不再使用它(尽管我喜欢它)。

考虑到了这一点,但在我们的例子中,通用git项目包含了一些脚本等文件,我们不希望将它们放在主项目资产文件夹中。我怀疑在您的案例中,您只是将unity资产推送到了公共存储库中?不,这是我们项目的共同点。因此,脚本、字体、纹理和预制,以及任何其他有用的东西,在一个项目中更改时,不必在其他项目中更改。共同回购协议本身并不是一个统一项目。如果您不使用您不想要的脚本(或其他资产),那么它们实际上不会在构建的项目中结束。