来自多个遥控器的Git拉不按预期工作

时间:2013-11-27 15:13:28

标签: git repository

我发现了几个类似的问题,但我仍然不确定我做错了什么。

我有一个核心项目,其上构建了多个项目,为了这个例子,我们只说一个项目,项目A将构建在核心之上。

所以当最初创建项目A.我会:

1)为“项目A”创建一个新的空回购并初始化

2)将“core”repo添加为新的远程并将远程重命名为“core”

3)从“核心”拉出来

4)在其上构建项目A

5)推回原点(Project A repo)

现在我的一个队友想要处理项目A,所以他们从回购中提取项目A,进行一些更改并提交。

到目前为止一直很好......

但是现在我需要对应该推出到项目A的核心进行更改。所以我拉出核心,进行更改,然后提交它们并推回。

此时我希望我的团队伙伴能够将核心添加为远程,从核心中提取我的更改并与项目A合并。

但是当他们这样做时,核心的变化并没有通过......

谁能告诉我我做错了什么?如何解决它或如何找出我做错了什么。

1 个答案:

答案 0 :(得分:1)

  

在我的情况下,“projectA”和“core”都位于目录树中的同一位置。例如,“projectA”包含一个app文件夹,其中包含配置文件,“core”,projectA中此配置文件的更改应与{{1}中的同一文件合并}}。
  子模块感觉应该是子项目(例如主项目中的库)。这对我来说仍然是正确的解决方案。

在这种情况下,coreprojectA将是同一个回购的两个分支,而不是两个不同的回购。

这并不妨碍您将不同的分支推送到单独 repos(具有共同历史记录),一个用于core,一个用于projectA。这样可以避免在一个仓库中管理太多分支。

  

此时我希望我的团队成员能够将core添加为遥控器,从core提取我的更改并与core合并。

     

但是当他们这样做时,核心的变化并没有通过......

他们应该能够做到:

projectA

原始答案

您需要在cd projectA git checkout branch_of_ProjectA git fetch core git merge core/a_branch_of_core

中将core声明为 submodule

当你对ProjectA进行更改时(使用你提到的命令序列:pull,add,commit,push),你需要返回一级到core,添加并提交代表新子模块“ProjectA”状态的新SHA1 然后按core

当您的同事提取ProjectA时,git submodule update会将ProjectA更新为core内的相关SHA1。