我们的团队在公司防火墙后面有一个现有的远程存储库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子模块和git子树。但我正在使用的不是一种涉及手动合并的粗略方法。换句话说,我在Bitbucket中创建了远程存储库R2,源代码树是
ZZZ\ <<------------ root of the repository R2;
.git\
CCC2\
CCC3\
CCC4\
我将拥有2个本地存储库,一个用于跟踪R1,另一个用于R2。然后工作流程是我先git pull然后在两个本地存储库之间进行手动/手动合并,并对R1和R2进行必要的git推送以使彼此的repo更改出现。是的,原油。
我的问题是,有更好,更简单的方法吗?团队同意不依赖于基于我们对使用子模块功能所需的所有调查的git子模块。使用嵌套git是不利的。所以,那种让我们去调查git子树。我们目前使用子树的尝试并没有按预期工作,所以还在学习。
我们还查看了稀疏结账,创建了R1的轮廓,但只检查了CCC2,CCC3和CCC4。这似乎有效。但是当我们将其推送到Bitbucket存储库R2时,R2将填充来自R1的所有源。所以,有些事情做得不对。
理想情况下,我们希望在R1和R2远程存储库之间或多或少透明的拉/推。换句话说,R1中会有一个名为“vendor-work”的分支,用于将供应商代码更改从R2拉到(合并)到该分支,测试它,并在适当时合并到我们的项目主/主分支中。同样,R2有一个名为“company-work”的分支,其中有一个pull请求,供应商在接受其供应商工作分支的拉取之前需要查看。我们还没有真正考虑过是否需要将存储库R2的历史记录合并到R1中,但目前的想法是,可能不希望将两个存储库历史合并为一个,从而将它们分开。
非常感谢。
答案 0 :(得分:0)
git中的安全性没有任何精细的粒度目录支持,但您可以使用各种流程。
第一个问题是,您是否介意将整个项目的读取权限提供给供应商?如果这不是一个选项,则需要使用submodules。我个人认为子模块有点痛,所以我建议避开这条路线。
如果您不介意授予他们对整个存储库的读取权限,那么您可以拥有他们需要的供应商checkout only the sub-directories。然后,为了控制协作提交,您可以让供应商执行拉取请求,以便在合并更改之前进行代码审查。