【问题标题】:Use gitignore to nest repositories.使用 gitignore 嵌套存储库。
【发布时间】:2012-11-27 01:08:09
【问题描述】:

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

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

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

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

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

提前谢谢你。

【问题讨论】:

    标签: git


    【解决方案1】:

    您可以使用git-subtree (Sample of usage) 代替子模块

    【讨论】:

    • 这个想法似乎很有趣,今晚我将阅读教程。 :D
    • 我喜欢这篇文章,我认为这最符合我的需要。谢谢 :D 不过,我认为“使用示例”链接末尾的 Luciano 和 Psi 的 cmets 也非常有用。他们说 .gitignore 方法和子树实现之间的主要区别是,要克隆项目,首先需要知道实际上有两个项目。如果这是主要的好处,我宁愿使用 .gitignore ,因为它很简单。由于这是一个私人项目,没有人会在不知道它的双重性之前下载它。
    【解决方案2】:

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

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

    这个想法是:

    • 一推
    • 多次更新
    • 保持子模块的优势(即记录您的网站正在使用的核心的确切版本)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 在这个实现下使用 .gitignore 会更容易吗?
      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 2014-01-17
      • 2015-01-03
      相关资源
      最近更新 更多