1

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

非常感谢。

4

1 回答 1

0

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

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

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

于 2013-06-06T16:34:13.677 回答