2

当谈到 git 时,我仍然是一个新手,所以虽然我确实看到了以下问题/答案 ,但它并没有真正给我足够的理解来真正做到这一点。这是我的基本问题:

我有几个环境(开发、测试、生产)供我移动代码。在大多数情况下,我在开发中进行开发,然后将私有存储库推送到 bitbucket(因为我可以拥有免费的私有存储库)。然后,我在需要更新代码的其他环境中将其从 bitbucket 中提取出来。没关系; 像你期望的那样工作。

问题是当我在私人仓库中时,我有一个“外部”目录,其中挂着一堆公共仓库(如下图所示):

示例 repo 目录结构

我希望所有公共回购的结帐状态在任何给定时间都相同。因此,假设我的开发环境中的公共 repo 1 是 master 后面的 10 次提交;当我将私有仓库拉入我的测试环境时,我不仅希望私有仓库被拉下(那里没问题),而且我想将公共仓库 1 拉到与开发中存在的相同提交级别。

这可能吗?

4

1 回答 1

1

作为序言,如果您没有在开发、测试、生产区域使用分支,而是为同一代码库管理多个存储库,您应该考虑简单地使用分支。这将使管理代码变得更加容易,而不是将代码推到不同的地方。

有一个名为 git-flow 的“模型”深入讨论了这个概念:http: //nvie.com/posts/a-successful-git-branching-model/

至于您的外部公共存储库,git 子模块功能听起来正是您所追求的。通过将存储库添加为子模块,您的主存储库将跟踪它们的提交。所以就像你说的,如果公共 repo A 落后 10 次提交,并且这是你在主 repo 中提交它的地方,它将在同一位置再次检查。

子模块 repo 更改要求您首先对外部 repo 进行更改,推送这些更改,将它们拉到您的主 repo 子模块,然后将它们提交到主 repo(以跟踪更改的提交)。

那里有更深入的子模块教程(这里是一个),但总体概述是这样的:

cd mainRepo
git submodule add http://git.domain.com/repo external/submoduleA

这会将您的公共回购克隆到外部/子模块A。如果需要,您可以从这里签出不同的提交。但是当你准备好后,你可以在你的主仓库中添加并提交它。现在,当您再次克隆此主存储库时,您将执行以下操作:

git clone http://git.domain.com/myMainRepo --recursive

recursive选项告诉它还继续检查所有子模块。您可以将其关闭并作为第二步进行初始化。但是我把它留给你来探索submodule命令的所有选项。

于 2012-11-25T02:17:18.770 回答