2017-03-06 87 views
1

最近我在GitHub上創建了一個PR,但是一些測試失敗了。而當地更多的測試沒有通過。所以我試圖弄清楚是什麼問題。如何列出所有遠程參考?

而我發現的事情是,特拉維斯正在測試的回購是在other commit我沒有。 ref是refs/pull/81/merge。所以,有人認爲我的分支合併到主人並創建相應的參考。是GitHub還是Travis?

而另一個問題,我可以列出所有的參考GitHub回購有?

回答

7

我對Travis本身一無所知,但GitHub確實創建了這些refs/pull/number/merge參考號。特別是,根據觀察,文檔似乎有點吝嗇,我只是一個GitHub的,當你點擊在GitHub上「新拉請求」,GitHub上的有些臨時用戶:

  • 創建一個名爲refs/pull/number/head參考保存您要求其他人爲您合併的提交ID;
  • 嘗試自動合併並提交(使用git merge)和(如果成功),則創建名爲refs/pull/number/merge的第二個引用。

注意,這個自動創建的合併提交不上任何分支,它只是具有分配相同的拉請求號碼,並且他的名字是從拉請求本身(明顯的引用只需更換headmerge)。我相信 - 但沒有手動測試 - 這種合併的第一個父母是你請求某人的分支的提示提交當他們他們相同合併,即,幕後的代碼創建這個refs/pull/number/merge基準是(或足夠接近):

commithash=...       # the commit ID for the pull-request 
mergeinto=$(git rev-parse $branchname) # the branch we are to merge into 
prnum=...        # get next pull request number 

# create the pull request itself 
git update-ref refs/pull/$prnum/pull $commithash 

# create the merge ref, if the merge succeeds 
git checkout $mergeinto 
if git merge -m "..." refs/pull/$prnum/pull; then 
    # merge succeeded: create the merge ref 
    git update-ref refs/pull/$prnum/merge HEAD 
else 
    # automatic merge failed, discard it 
    git merge --abort 
fi 

(這個特殊的代碼序列食堂大約與索引,並留下HEAD分離,所以它必須與鎖定庫和下班後進行清理或使用臨時工作樹;實際的代碼序列可能因任何原因而不同)。

因此:

所以,有人推測合併我支到主,創造了相應的參考。是GitHub還是Travis?

鑑於GitHub的William of Ockham建議沒有必要調用特拉維斯。 :-)

而另一個問題,我可以列出所有的參考GitHub回購有?

只要你有機會獲得:

$ git ls-remote 

(假設遠程是GitHub的URL)將顯示所有暴露的引用。我還沒有看到一種Web界面的方式來做到這一點,也沒有在我的GitHub API文檔中仔細閱讀。

+0

我看到'git ls-remote'必須從遠程repo運行,或者可以在分叉庫中使用'git ls-remote REMOTE_NAME'。 –

+1

@ x-yuri:更準確地說,除非你給它一個參數,'git ls-rmote'查找當前分支的'remote'設置。參數可以是遠程的名稱(比如'origin'或'upstream'),在這種情況下,'git ls-remote'從中查找URL,或者可能是一個URL。一旦Git擁有URL,它就會調用通常的'git fetch'操作的第一部分,請求從其他Git獲取所有公共引用的列表。 – torek