我们的团队在公司防火墙后面有一个现有的远程存储库 R1,它具有以下目录结构,
A\ <<------------- root of the repository R1, where "make project" is done;
.git\
B\
C\
CC1\
CC2\
CCC1\
CCC2\ <<------------ share with vendor for code collaboration;
CCC3\ <<------------ share with vendor for code collaboration;
CCC4\ <<------------ share with vendor for code collaboration;
CCC5\
CC3\
D\
E\
我们有一个与防火墙外部的供应商合作的项目,该项目涉及上述 3 个源子目录 CCC2、CCC3 和 CCC4。供应商和我想使用 git 进行代码共享和代码更新。我们已经同意使用 Bitbucket 在这 3 个子目录中托管私有远程代码存储库。
阅读使用 git 的不同方法,我们遇到了嵌套的 git、git submodule 和 git subtree。但我使用的既不是一种涉及手动合并的粗略方法。换句话说,我在 Bitbucket 中使用源树创建了远程存储库 R2,即,
ZZZ\ <<------------ root of the repository R2;
.git\
CCC2\
CCC3\
CCC4\
我将有 2 个本地存储库,一个用于跟踪 R1,另一个用于 R2。然后工作流程是我会先 git pull 然后在两个本地存储库之间进行手动/手动合并,并对 R1 和 R2 执行必要的 git push 以使彼此的 repo 更改出现在另一个上。是的,粗制滥造。
我的问题是,有没有更好、更简单的方法?根据我们对使用子模块功能的所有调查,团队同意不依赖 git 子模块。并且使用嵌套的 git 是不利的。所以,这让我们去研究 git subtree。我们目前对子树的尝试并没有像预期的那样工作,所以还在学习。
我们还查看了创建 R1 轮廓但仅签出 CCC2、CCC3 和 CCC4 的稀疏签出。这似乎行得通。但是当我们将它推送到 Bitbucket 存储库 R2 时,R2 将填充来自 R1 的所有源。所以,有些事情做得不对。
理想情况下,我们想要的是在 R1 和 R2 远程存储库之间或多或少透明的拉/推。换句话说,R1 中将有一个名为“vendor-work”的分支,用于将供应商代码更改从 R2 拉(合并)到该分支,对其进行测试,并在适当时合并到我们的项目主/主分支. 同样,R2 有一个名为“company-work”的分支,其中包含供应商在接受对其供应商工作分支的拉取之前需要审查的拉取请求。我们还没有真正考虑过是否需要将存储库 R2 的历史记录合并到 R1 中,但目前的想法是,可能不希望将两个存储库历史记录合并为一个,从而将它们分开。
非常感谢。