[英]Is git subtree compatible with Gerrit?
我们的 git 存储库托管在 Gerrit 中。 一位同事维护 2 个 repos main
和sub
。 他想在main
中包含sub
作为子树。 到目前为止,这是我们尝试过的:
git clone repo_url_main -b dev main
cd main
git subtree add -P foo/bar repo_url_sub master
touch foo/bar/baz.txt
git add .
git commit -m 'foo.bar.baz.tt'
git subtree push -P foo/bar repo_url_sub master
第一个问题是git subtree push
失败,因为他的账户没有权限直接推送未经审查的提交。 审查是他想要的。
对于非子树存储库,我们使用git push origin HEAD:refs/for/master
创建审查更改。 所以我们尝试git subtree push -P foo/bar repo_url_sub master:refs/for/master
也失败了。 Git 抱怨master:refs/for/master
不是有效的参考。 我在手册中找到git subtree push -P <prefix> <repository> <ref>
。 最后一部分是ref
而不是refspec
。 所以这里不需要master:refs/for/master
。
然后我们尝试git subtree push -P foo/bar repo_url_sub refs/for/master
。 推送成功,但结果不是预期的。 创建分支refs/for/master
而不是审查更改。 经过几次尝试,我们发现似乎无论最后一个 ref 是什么,它总是扩展为refs/heads/...
。 甚至refs/heads/master
也扩展为refs/heads/refs/heads/master
。
到目前为止我们想到的解决方法:
使用 Google 的 REPO 工具来管理 2 个 repos,就像它为 AOSP 所做的那样,这需要额外的技能并且有点矫枉过正。
使用git submodule
,比较麻烦。
在main
中包含一个本地传输sub
存储库作为子树。 首先git subtree push
在 transfer repo 中更新master
,然后在 transfer repo 中使用git push repo_url_sub HEAD:refs/for/master
来创建review更改。 但是我们可以预见当涉及到许多维护者时会出现混乱。
是否有任何 git 选项或配置可以指示git subtree push
以在 Gerrit 中正确创建审核更改? 感谢您的任何想法。
因此,使用“git help subtree”:
推
使用提供的进行拆分,然后执行 git 推送以将结果推送到存储库并参考
所以我认为您可以先执行“git subtree split”,然后执行“git push”,例如:
git subtree split --prefix=foo/bar -b split
git push repo_url_sub split:refs/for/master
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.