使用git更好地实践,涉及与供应商共享的现有远程存储库子目录

时间:2013-06-05 17:11:15

标签: git bitbucket

我们的团队在公司防火墙后面有一个现有的远程存储库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中,但目前的想法是,可能不希望将两个存储库历史合并为一个,从而将它们分开。

非常感谢。

1 个答案:

答案 0 :(得分:0)

git中的安全性没有任何精细的粒度目录支持,但您可以使用各种流程。

第一个问题是,您是否介意将整个项目的读取权限提供给供应商?如果这不是一个选项,则需要使用submodules。我个人认为子模块有点痛,所以我建议避开这条路线。

如果您不介意授予他们对整个存储库的读取权限,那么您可以拥有他们需要的供应商checkout only the sub-directories。然后,为了控制协作提交,您可以让供应商执行拉取请求,以便在合并更改之前进行代码审查。