在私人仓库中管理外部git回购的最佳方式

时间:2012-11-25 00:56:53

标签: git

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

我有几个环境(开发,测试,生产),我移动代码。在大多数情况下,我在开发中开发,然后将私人回购推送到bitbucket(因为我可以拥有免费的私人回购)。然后我在其他需要更新代码的环境中将它从bitbucket中拉下来。没关系;按照你的预期工作。

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

example repo dir structure

我希望所有公共回购的结帐状态在任何给定时间都相同。所以,让我们说在我的开发环境中的公共回购1是主人之后的10次提交;当我将私人仓库拉入我的测试环境时,我不仅希望私有仓库被拆除(没有问题),但我想将公共仓库1下拉到开发中存在的相同提交级别。

这可能吗?

1 个答案:

答案 0 :(得分:1)

前言,如果您没有为开发,测试,生产区域使用分支,而是为相同的代码库管理多个存储库,那么您应该只考虑使用分支。这将使管理代码变得更加容易,而不是将代码推送到不同的地方。

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

对于您的外部公共存储库,git子模块功能听起来就像您所追求的那样。通过将repos添加为子模块,您的主仓库将跟踪它们的提交。就像你说的那样,如果公共回购A是10个提交,那么你在主仓库中提交它,它将在同一个位置再次检出。

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

有更多深入的子模块教程(here is one),但总的概述是这样的:

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

这会将您的公共仓库克隆到external / submoduleA中。从这里你可以检查一个不同的提交,如果你想。但是当你准备好了,你可以在主回购中添加并提交它。现在,当您再次将其他主要仓库复制出来时,您可以这样做:

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

recursive选项告诉它还要继续检出所有子模块。您可以将其关闭并作为第二步启动它们。但是我留给你探讨submodule命令的所有选项。