Git:Clone of Clone上的远程分支可用性

时间:2013-06-05 17:05:42

标签: git git-remote git-flow

所以我对Git很新。我已经在本地使用了一段时间,但从来没有用于分布式团队协作的预期目的。

背景 最近,我公司的外部开发人员开始推动自己和我公司的另一名员工,他们对我们的网站做了一些小改动,开始致力于他们的回购。他们使用git flow工作流程。

计划流程 我的公司在流程和控制方面非常重要,所以我们的IT部门有一个人,如果你愿意的话,他将扮演那种“守门人”的角色。他将我们开发人员回购的副本克隆到我们的网络,员工#2然后我从门卫的克隆中克隆出来。员工#2和我永远不会直接进入开发者的回购。我查看了门卫的克隆,他拥有开发人员回购的所有跟踪分支。我的他的克隆没有任何跟踪分支。要获得跟踪分支机构,他必须检查我们需要的所有分支机构,然后让我和员工#2进行取件吗?将我们的分支机构纳入其(门户管理员)分支到他们的(开发人员)分支中可能存在问题。

这是计划过程的一个小ASCII图:

   Developer repo
         |
         |
 Company "Gate keeper"
        / \
       /   \
      /     \
     me     employee #2

似乎我没有适当的开发分支来创建功能分支,这会搞砸。

对不起,这太长了,谢谢你的帮助!

tl; dr 在没有原始远程跟踪分支的克隆克隆中工作,如何获取它们以及潜在问题是什么?

3 个答案:

答案 0 :(得分:0)

您和#2 Gatekeeper repo作为远程,并从中获取。当你这样做时,你只能获得 Gatekeeper 的本地分支的状态,在他们当前的相应提交中。

因此, Gatekeeper 需要git pull相关分支机构才能从 Developer repo获取最新更改。然后,您可以从 Gatekeeper 获取最新更改。

对我来说似乎不方便,因为它依赖于 Gatekeeper 定期拉动,以便您可以拉动。另外,如果有他不喜欢的改变, Gatekeeper 应该做什么? git revert它?

可能更好的替代工作流程的是Integration-Manager Workflow Gatekeeper 可以是集成管理器,您,#2 Developer 可以是贡献者。

什么是最好的取决于 Gatekeeper 的作用。他负责代码,还是 Developer 负责?

答案 1 :(得分:0)

我会说一般来说这是不好的做法,除非看门人和你们两个是唯一一个在存储库上工作的开发人员。 Git的优势之一就是保留本地功能分支,通过合并主分支(git流程中的开发分支)的最新更改,您可以轻松掌握最新功能。

想象一下,你有一个功能分支,开发时间很长,比如2周。如果开发分支经常被其他开发人员推送并且网守没有经常更新他的存储库,那么在尝试合并它时会有很多冲突。如果你很幸运,当他试图将它合并到主存储库中时,看门人就会头痛。

您的主存储库在哪里托管?如果它托管在例如Bitbucket或Github上,一个更好的方法是给你读取存储库的权限,这样你就可以分叉它。然后你可以分叉存储库,提交你自己的副本然后把请求拉到主存储库。通过这种方式,您可以保持您的fork最新(和您的本地工作区),而看门人和其他人可以在您的代码合并到主存储库之前对您的代码进行评论。

设置看起来像这样

-------------------           -------------------------------
| Main repository |           | Your forked repository      |
-------------------           | (Main repository as remote) |
Gatekeeper can read/write     -------------------------------
You can read                  You have read/write access
                              You can fetch/pull the latest changes from main
                              You can push your commits

现在,您可以轻松地将最新更改提取/拉入分叉存储库并启动其功能分支。如果主存储库已更新,您始终可以获取/拉取更改并将其合并到功能分支中。

完成本地功能分支?将整个分支推送到分叉存储库,然后对主存储库执行拉取请求,然后可以对其进行审核,合并或拒绝。

这将为您和其他相关开发人员节省公司时间和麻烦。

答案 2 :(得分:0)

假设承包商的回购同样(裸且)DMZ,我会考虑在每个回购钩子中推送到另一个。为了防止在公司间边界发现推送冲突,dmz'd repos中的每个分支只能由一个公司或另一个公司更新。