【问题标题】:Git: Maintaining third-party modules consisting of multiple directoriesGit:维护由多个目录组成的第三方模块
【发布时间】:2011-08-05 09:55:18
【问题描述】:

我工作的公司正在使用可以通过模块扩展的第三方 Web 应用程序 (PHP/MySQL)。我们需要跟踪我们自己对核心应用程序和其他模块的更改跟踪安装了哪些模块,同时保持轻松将应用程序及其模块更新到最新的供应商版本

目前我们正在使用一个包含所有内容的 git 存储库。为了保持可更新性,我们使用了供应商分支策略。这适用于主应用程序,但当多个模块进入阶段时很快就会变得混乱。

但是我无法找到一种可行的方法来使用 git 管理这样的项目,特别是因为 git 的子模块和 git 的子树合并似乎都需要一个子项目包含在 one 目录中。但对于我见过的大多数 Web 应用程序来说,情况并非如此,因为它具有以下目录结构:

app/
  `-code/
      `-path/to/plugin/code
  `--i18n/
      `-path/to/plugin/i18n
  `--assets/
      `-path/to/plugin/assets

那么有谁知道如何在不牺牲太多可用性的情况下解决这个问题(就像子模块一样,恕我直言)

更新

还请考虑我使用的是 Windows Vista 和 symlinks don't seem to work with Git for Windows

【问题讨论】:

    标签: git plugins module directory


    【解决方案1】:

    如果您的环境支持符号链接,我会推荐子模块方法,结合软链接以获得正确的目录结构。

    这样,您可以从以下方面获益:


    来自cmets:

    基本上你有两个目录结构:

    • 直接由 git checkout 产生,带有子模块目录。
    • 一个,手动创建以适应预期结构,其中包含“ln -s”(或mklink for Windows Vista/Seven)命令,用于将第一个结构中的正确目录链接到第二个结构中的预期位置。

    OP raphinesse 对象:

    如果能够克隆存储库并拥有运行应用程序所需的结构,那就太好了。
    每次有人克隆存储库时,都必须在单独的目录中使用符号链接重新创建整个层次结构,这对我来说似乎是很多工作。

    我的回复:

    它可以是包含在 repo 本身中的脚本,用户将执行该脚本以生成正确的目录结构。这种情况下的一键式解决方案。

    OP raphinesse 同意:

    是的,我只是想添加一个脚本来初始化和更新子模块以及在主存储库的工作目录中设置相关链接“签出后”(如果 UAC-Prompt 没有任何麻烦)。当然,以这种方式设置的符号链接必须包含在 .gitignore 文件中。

    【讨论】:

    • 我看到了组件方法的好处,因此愿意接受 git submodule 对工作流程施加的限制。我也熟悉符号链接的概念,偶尔会在 Linux 机器上使用它们。但是,我不太明白应该如何使用它们来解决子模块期望位于源树的专用子目录中的事实,如手册页所述。你能帮我澄清一下吗?
    • @raphiness:基本上你有两个目录结构:一个直接来自git checkout,它的子模块目录。一个,手动创建以适应预期的结构,其中包含“ln -s”命令,以将第一个结构中的正确目录链接到第二个结构中的预期位置。
    • 我忘了提到我使用的是 Windows Vista。正如我刚刚发现的那样,symlinks don't seem to work 使用适用于 Windows 的 Git。 叹息
    • @raphiness: a/ Windows Vista 有符号链接。 b/ 您不会在 git 工作树中使用它们,而是在一个单独的非 git 目录结构中使用它们,该目录结构将链接到 git 工作树。
    • a) 我知道。 b) 如果能够克隆存储库并拥有运行应用程序所需的结构,那就太好了。每次有人克隆存储库时,都必须在单独的目录中使用符号链接重新创建整个层次结构,这对我来说似乎是很多工作。
    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多