我发现了几个类似的问题,但我仍然不确定我做错了什么。
我有一个核心项目,其上构建了多个项目,为了这个例子,我们只说一个项目,项目A将构建在核心之上。
所以当最初创建项目A.我会:
1)为“项目A”创建一个新的空回购并初始化
2)将“core”repo添加为新的远程并将远程重命名为“core”
3)从“核心”拉出来
4)在其上构建项目A
5)推回原点(Project A repo)
现在我的一个队友想要处理项目A,所以他们从回购中提取项目A,进行一些更改并提交。
到目前为止一直很好......
但是现在我需要对应该推出到项目A的核心进行更改。所以我拉出核心,进行更改,然后提交它们并推回。
此时我希望我的团队伙伴能够将核心添加为远程,从核心中提取我的更改并与项目A合并。
但是当他们这样做时,核心的变化并没有通过......
谁能告诉我我做错了什么?如何解决它或如何找出我做错了什么。
答案 0 :(得分:1)
在我的情况下,“
projectA
”和“core
”都位于目录树中的同一位置。例如,“projectA
”包含一个app文件夹,其中包含配置文件,“core
”,projectA
中此配置文件的更改应与{{1}中的同一文件合并}}。
子模块感觉应该是子项目(例如主项目中的库)。这对我来说仍然是正确的解决方案。
在这种情况下,core
和projectA
将是同一个回购的两个分支,而不是两个不同的回购。
这并不妨碍您将不同的分支推送到单独 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。