如何使用非标准refspec正确添加子模块?

时间:2012-10-03 08:10:51

标签: git gerrit git-submodules refspec

我们正在使用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 --init git报告失败时。 Git在子模块中找不到哈希,因为默认情况下git没有在refs/changes中看到引用,也不从它们下载对象。

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

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

1 个答案:

答案 0 :(得分:0)

您不希望在子模块指向refs / changes处的提交的情况下推送更改。 Gerrit在审核期间将代码存储在那里,但在审核完成并且提交了更改后,可以从标准refs / heads /访问。您的子模块应指向已审核的&在refs / heads / BRANCH_NAME上提交了代码。