2014-09-24 58 views
1

假設我有一個承諾這下格里特代碼審查,但SHA1不是它的參考(參考文獻/修改/ ...)拉使用其提交ID從格里特庫提交僅

問題是:如何從我的本地存儲庫中獲取它?

有一個類似的問題還沒有格里特無關的問題在這裏:Retrieve specific commit from a remote Git repository

似乎答案不格里特工作:

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/... reference來獲取提交,但我想知道是否有更直接的方法,更重要的是,當Gerrit未找到直接由其SHA1引用時提交。

+0

您是否試過先檢查出它? 'git chekcout SHA1' – HiB 2014-09-24 17:32:18

+0

是的,它不在本地存儲庫中。 – ocroquette 2014-09-25 11:09:22

+0

in git config _remote.origin.fetch_ param可能包含'+ refs/heads/*:refs/remotes/origin/*'但Gerrit提交存儲在'refs/changes/'這就是爲什麼我認爲你需要知道具體的參考能夠獲取它 – HiB 2014-09-25 13:43:57

回答

1

似乎你有(幾乎)回答你自己的問題。

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

謝謝,但我實際上更好奇爲什麼Gerrit沒有找到有效的提交,除非提供了引用,以及如何改變這一點。我不是在尋找一個實用的解決方案,更多的是爲了解釋。 – ocroquette 2014-09-27 22:03:59