2

我想嵌套 2 个 git repos。我一直在阅读子模块,有一段时间我认为它很棒,我想我可能想要别的东西。这是我的情况:

首先,我想我应该提到我的所有服务器都托管网站,并且设置为 staging.domain.com 和 domain.com(实时)模式。

在每台服务器中,我都有一个作为网站的父存储库和一个作为我的核心库的子存储库。我需要我的核心在我的所有服务器上都相同,但网站存储库对于它们所在的服务器都是唯一的。我想将更改写入核心,同时推送到所有暂存域,然后做一些质量保证,然后推送到所有实时服务器。

我最初虽然这些子模块可以满足我的需求,但我对它们的问题是我需要一次更新所有内核。如果我使用子模块,我的核心将更新,但在父网站运行 git submodule update 和 git commit 之前不会生效。

我想为什么不直接使用 gitignore 来忽略核心所在的文件夹并将它们视为独立的实体。有没有其他人这样做过?我会遇到什么问题?你有更好的建议吗?

先感谢您。

4

3 回答 3

2

看来您可能会从暂存服务器上的接收后提交中受益,您可以在该服务器上:

  • 将您的更新推送到一个裸仓库核心
  • 触发git submodule update所有临时站点
    • cd到一个服务器站点/path/staging/site1
    • GIT_DIR=/path/staging/site1/.git WORK_TREE=/path/staging/site1/.git git submodule update
    • 对每个站点重复

这个想法是:

  • 一推
  • 多次更新
  • 保持子模块的优势(即,记录您的站点正在使用的核心的确切版本)
于 2012-11-27T07:45:18.833 回答
2

您可以使用git-subtree代替子模块(使用示例

于 2012-11-27T08:12:37.863 回答
0

这取决于您是否希望父 repo 上的“git status”返回 repo 是干净的。如果您可以在父 repo 上使用“git status”返回类似“Untracked files:... core-libraries/”的内容,那么您可以将 core-libraries repo 作为父 repo 的未跟踪子项。

Git 真的不关心未跟踪的文件和目录。

于 2012-11-27T21:52:49.413 回答