【问题标题】:Pull a commit from a Gerrit repository using its commit ID only仅使用其提交 ID 从 Gerrit 存储库中拉取提交
【发布时间】:2014-09-24 16:07:50
【问题描述】:

假设我有一个正在 Gerrit 中代码审查的提交的 SHA1,但没有它的引用 (refs/changes/...)

问题是:如何从我的本地存储库中获取它?

这里有一个与 Gerrit 无关的类似问题:Retrieve specific commit from a remote Git repository

答案似乎不适用于 Gerrit:

git fetch origin 67b4b77655d65004cc908aaf7e65b24bcaa81fd8:refs/remotes/origin/foo
fatal: Couldn't find remote ref 67b4b77655d65004cc908aaf7e65b24bcaa81fd8

如果我使用 git ls-remote,我可以看到提交:

git ls-remote | grep 67b4b77655d65004cc908aaf7e65b24bcaa81fd8
From ssh://gerrit/repo
67b4b77655d65004cc908aaf7e65b24bcaa81fd8        refs/changes/...

所以看起来 Gerrit 在显式获取期间没有查看 refs/changes/。

当然,作为一种解决方法,我可以使用它的 refs/changes/... 引用来获取提交,但我想知道是否有更直接的方法,更重要的是,当 Gerrit 找不到提交时当由其 SHA1 直接引用时。

【问题讨论】:

  • 你试过先检查一下吗? git chekcout SHA1
  • 是的,它不在本地存储库中。
  • 在 git config 中的 remote.origin.fetch 参数可能包含 +refs/heads/*:refs/remotes/origin/* 但 Gerrit 提交存储在 refs/changes/<changeid> 这就是为什么我认为你需要知道具体的参考能够获取它
  • 感谢您的努力,但我已经很清楚,我可以通过参考获取。问题是:如何直接使用ID获取?

标签: git gerrit


【解决方案1】:

您似乎已经(几乎)回答了自己的问题。

git ls-remote | grep 67b4b77655d65004cc908aaf7e65b24bcaa81fd8 |  awk '{system("git fetch origin " $2)}' && git checkout 67b4b77655d65004cc908aaf7e65b24bcaa81fd8 

【讨论】:

  • 谢谢,但我实际上更好奇为什么 Gerrit 没有找到有效的提交,除非给出参考,以及如何改变它。我不是在寻找实用的解决方案,而是在寻找解释。
猜你喜欢
  • 2015-03-31
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
相关资源
最近更新 更多