Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在私人回购中管理外部git回购的最佳方式_Git - Fatal编程技术网

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

在私人回购中管理外部git回购的最佳方式,git,Git,说到git,我还是个新手,所以虽然我看到了下面的内容,但它并没有给我足够的理解来真正做到这一点。这是我的基本问题: 我有几个环境(开发、测试、生产),我可以在这些环境中运行代码。在大多数情况下,我在开发中开发,然后将私有回购推到bitbucket(因为我可以有免费的私有回购)。然后,在其他环境中,我从bitbucket中提取这个,我需要更新的代码。那很好;正如你所期待的那样 问题是,当我在私有回购中时,我有一个“externals”目录,上面挂着一堆公共回购(如下图所示): 我希望所有公共回购

说到git,我还是个新手,所以虽然我看到了下面的内容,但它并没有给我足够的理解来真正做到这一点。这是我的基本问题:

我有几个环境(开发、测试、生产),我可以在这些环境中运行代码。在大多数情况下,我在开发中开发,然后将私有回购推到bitbucket(因为我可以有免费的私有回购)。然后,在其他环境中,我从bitbucket中提取这个,我需要更新的代码。那很好;正如你所期待的那样

问题是,当我在私有回购中时,我有一个“externals”目录,上面挂着一堆公共回购(如下图所示):

我希望所有公共回购的结帐状态在任何给定时间都相同。假设在我的开发环境中,公共回购协议1比主协议晚10次提交;当我将私有repo拉入我的测试环境时,我不仅希望私有repo被拉下来(这里没有问题),而且还希望将公共repo 1拉到开发中存在的相同提交级别


这可能吗?

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

有一个名为git flow的“模型”深入讨论了这个概念:

至于您的外部公共回购,git子模块功能听起来正是您想要的。通过将repo添加为子模块,您的主repo将跟踪它们的提交。所以就像你说的,如果公共回购协议A落后10次提交,并且你在主回购协议中提交了10次,它将在同一个位置再次签出

子模块回购变更要求您首先对外部回购进行变更,将这些变更推送到主回购子模块,然后在主回购中提交(以跟踪变更的提交)

还有更多深入的子模块教程,但总体概述如下:

cd mainRepo
git submodule add http://git.domain.com/repo external/submoduleA
这将把您的公共回购克隆到外部/子模块中。如果需要,可以从这里签出不同的提交。但当你准备好了,你可以在你的主回购协议中添加并提交它。现在,当您将此主回购协议再次克隆给其他人时,您将执行以下操作:

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

recursive
选项告诉它继续签出所有子模块。您可以将此选项忽略,然后作为第二步初始化它们。但是我将此留给您来探索
子模块
命令的所有选项。

您使用子模块吗?你是在使用分支机构还是多个回购协议?没有。到目前为止,我只是在“externals”目录上做了一个.gitignore,然后使用git手动同步externals目录中的文件。那么分支呢?您是在为不同的环境使用分支机构还是在使用多个回购协议?不,不是。我确实有一个公共回购协议,我已经将代码转移到了一个新的分支机构。除了这个例外,我还没有真正使用过很多分支。