1

我们正在使用 Gerrit 进行代码审查。Gerrit 将审查过的代码存储在非标准参考路径中 - refs/changes. 因此,对提交的引用看起来像refs/changes/95/295/2. 我想将 Gerrit 中的项目作为子模块添加到我的超级项目中。

我可以分两步完成:

  • 将我的项目作为子模块添加到 master 当前指向的 commit-hash
  • 执行git fetch origin refs/changes/95/295/2 && git checkout FETCH_HEAD并提交更改。

但是当我尝试检查我的超级项目并做git update --initgit 报告失败时。Git 在子模块中找不到哈希,因为refs/changes默认情况下 git 没有看到引用,并且不从它们下载对象。

好的,我可以通过git config --add remote.origin.fetch '+refs/changes/*:refs/remotes/origin/changes/*'在我的 gerrit repo 中执行来修复它,然后重试子模块更新,这样就可以了。

问题是,我可以像通常的工作流程那样一步执行“添加”和“初始化/更新”子模块吗?基本上,我需要在“clone”/“pull”/“submodule add”/“sumbodule update”执行开始之前设置 refspec 的功能。

4

1 回答 1

0

您不想通过指向 refs/changes 的提交的子模块来推动更改。Gerrit 在审查期间将代码存储在那里,但在审查完成并提交更改后,可以从标准 refs/heads/ 访问它。您的子模块应指向 refs/heads/BRANCH_NAME 中已审核和提交的代码。

于 2012-10-03T16:55:38.933 回答