致力于Git的两个远程项目

时间:2010-10-16 16:39:30

标签: git version-control github

我在Codeigniter中有一个项目,通过Git和Github管理,包含我的'样板'定制和库(如集中式Render库),我用于所有CI项目 - 让我们称之为'Baseline'。

在我开发和完善基线CI项目的同时,我也在开发当前的客户项目,我们将其称为'客户'。

我的问题是 - 同时开发基线项目和客户项目的最有效方法是什么?例如,我可以在Client项目中创建一个新的控制器和模型,但随后添加新的帮助器,一些通用视图并添加到我认为需要添加到Baseline的几个库中。我是否需要执行两次提交,一次用于Baseline(并将其推送到远程Baseline repo),然后再次提交Client项目?

我一直在试图弄清楚如何使用子模块或分支来完成同样的事情,但子模块似乎需要在Git中使用自己的目录结构,并且在分支时我不确定它是如何工作的。

帮助?

2 个答案:

答案 0 :(得分:2)

由于我猜测子模块需要的单独目录结构设置对你来说是不行的,所以我建议改为:

  1. 有一个存储库(A)是您的“基线”项目。在该存储库中的基线上完成所有工作,并在那里提交。

  2. 将该存储库克隆到另一个存储库(B),然后为该客户端项目完成所有工作。将(A)保留为远程(如果您git clone (A),它将自动设置为origin;您可以将github远程添加为github而不是origin)。

  3. 然后,当您对基线(A)存储库进行更新时,将它们提交到(A),然后使用git pull将它们从(A)拉到(B)。 (永远不要从(B)推送到(A),因为您不希望基准仓库中有客户代码。)

  4. 所以是的,您需要单独提交基线更新和客户端更新,但您不必两次提交相同的代码。

答案 1 :(得分:1)

我建议使用分支或子模块。

使用分支,您将拥有baseline分支和client分支。更新client后切换到baseline时,请将baseline合并到client

使用子模块,任一存储库都可以是顶级模块,另一个存储库可以是子模块。这两种布局都具有一定的逻辑意义(baseline位于顶部,client取决于它,因此是一个孩子;顶部有client,它使用baseline作为库,这应该是孩子;这取决于你)。

我会推荐分支。