Git:没有推送权限的跨分支机构的团队合作

Gle*_*son 5 git synchronization branch

我目前正在为一个Scrum团队工作,该团队正在与另一个Scrum团队使用共享git存储库.为方便起见,我们将调用我的scrum团队Autobot和其他霸天虎.

霸天虎团队拥有对存储库的完全推送和拉取访问权限,并负责框架.

Autobot团队能够拉动,但不能推动.通常,如果团队成员独立工作,则没有问题.但是,出现这样的情况,即拉动并推送给另一个团队成员分支是有用的.到目前为止,Autobot尚未被Decepticon授予推送访问权限(简单修复),因此需要解决此问题.

用例示例:考虑Optimus(继续变换器隐喻)是否已完成以下操作:

#!/bin/bash
optimus@workstation0:~/git/work_project/> git branch sdev /sprint/dev --track
optimus@workstation0:~/git/work_project/> git checkout sdev
optimus@workstation0:~/git/work_project/> touch important_file.py
optimus@workstation0:~/git/work_project/> git add important_file.py
optimus@workstation0:~/git/work_project/> git commit -m "Important file added."
Run Code Online (Sandbox Code Playgroud)

现在,Rodimus将通过编辑important_file.py 来帮助Optimus.他创建了自己的分支并从Optimus的分支直接拉出,并试图推动:

#!/bin/bash
rodimus@workstation1:~/git/work_project/> git branch sdev /sprint/dev --track
rodimus@workstation1:~/git/work_project/> git pull ~optimus/git/work_project sdev
rodimus@workstation1:~/git/work_project/> echo "'''TODO: Add content''' > important_file.py
rodimus@workstation1:~/git/work_project/> git commit -m "Added TODO".
rodimus@workstation1:~/git/work_project/> git push ~optimus/git/work_project sdev
Run Code Online (Sandbox Code Playgroud)

并且发生错误.什么是适当的程序?拥有第二个存储库是不可取的,但如果需要则可以执行.

Von*_*onC 3

2014 年更新(3 年后)

正如Adrien Be评论中提到的

Stash实现了分支级别权限

请参阅“使用分支权限

https://confluence.atlassian.com/download/attachments/313460915/STASH20_branch_perm_adv.png?version=4&modificationDate=1376470584184&api=v2&effects=border-simple,blur-border


原始答案(2011 年 7 月)

通常的解决方案是第二个存储库,其中:

  • 汽车人团队可以推动
  • 霸天虎团队可以定期获取并查看是否有任何需要合并的内容

但这需要第二个回购协议。

另一种解决方案是使用Gitolite这样的授权框架,为 Autobot 分支提供推送访问权限。
它只需要一个存储库,但需要一台服务器(ssh 或 apache)能够对推送到所述存储库的用户进行身份验证(因为本地协议没有身份验证)。

因此,这两种解决方案都不是一个容易解决的问题。