【发布时间】: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获取?