从另一个存储库更新Git存储库

时间:2014-01-06 01:44:36

标签: git

我一直在使用PHP自定义MVC框架项目,以便我可以在其上构建网站,并将项目放在BitBucket.org上的存储库中。

使用这个框架我想创建多个单独的网站,每个网站都有自己的存储库。

是否有可能,如果是这样,我将如何解决这个问题,将主框架本地复制到文件夹,构建一个新网站,然后将来如果我更新主框架,我可以继续更新我的所有网站。

例如,假设我下载了CakePHP 2.1并在三个不同的目录中构建了三个不同的站点。然后他们将框架更新为2.2,我想将这些更新合并到每个网站项目中。

我对子模块有一个模糊的理解,但我不认为这正是我正在寻找的。

2 个答案:

答案 0 :(得分:1)

假设您在github:user/base有一个基础项目,在github:user/site1github:user/site2有自定义网站项目,每个项目都来自基础项目。也就是说,site1和site2最初是从base进行克隆的,然后你处理它们,它们有它们唯一的提交,base也是如此,所以在这一点上所有这些存储库都彼此不同。

即使存储库存在分歧,它们也有共同的历史。您可以使用git merge将基础项目中的更改导入自定义站点项目。

我最近自己开始这样做。在site1site2的工作树中,我定义了两个遥控器:

  1. origin:指向site1中的github:user/site1,site2中的github:user/site2
  2. upstream:指向site1和site2
  3. 中的github:user/base

    当我想从基础引入更改时,我使用以下命令:

    git fetch upstream
    git merge upstream/master
    git push
    

    但是,merge步骤中的冲突很常见,但这可能是因为我的项目非常年轻,而且我在基础上做了相当深刻的改变。如果您能够轻松解决冲突,那就太好了。

答案 1 :(得分:0)

最后一步(根据对master的更改来更新各个站点)需要在Git之外做一些工作。以下是我的设置方法:

主框架存储库是一个Git存储库。它有一些存根位置,用于网站放置的内容:

main/
  framework/
    js/
      bla.js
      foo.js
    php/
      bar.php
    css/
      start.css
  site/

现在为您的网站克隆此存储库并且(这是重要的一点)仅将内容添加到“site”子目录

在主框架存储库中,只修改“framework”子目录下的内容。

如果您保留该分区,您将能够在网站存储库中简单地“git pull”,并且Git会快速将更改从“main”合并到您的网站存储库中。

如果您需要对框架进行更改,但只会将其应用于一个站点,那么问题就会出现。