2017-03-06 88 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