繁体   English   中英

git 子树是否与 Gerrit 兼容?

[英]Is git subtree compatible with Gerrit?

我们的 git 存储库托管在 Gerrit 中。 一位同事维护 2 个 repos mainsub 他想在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

到目前为止我们想到的解决方法:

  1. 使用 Google 的 REPO 工具来管理 2 个 repos,就像它为 AOSP 所做的那样,这需要额外的技能并且有点矫枉过正。

  2. 使用git submodule ,比较麻烦。

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM