如何列出所有远程参考?

x-y*_*uri 12 git github refs

最近我在GitHub上创建了一个PR,但是有些测试失败了.而在当地甚至更多的测试没有通过.所以我试着找出问题所在.

而我发现的事情是特拉维斯正在测试回购是否属于我没有的其他提交.ref是refs/pull/81/merge.所以,有人应该将我的分支合并到主人并创建相应的引用.是GitHub还是Travis?

另一个问题,我可以列出GitHub repo的所有引用吗?

tor*_*rek 14

我对Travis本身一无所知,但GitHub确实创造了这些参考.特别是,基于观察 - 文档似乎有点吝啬,我只是GitHub的一个偶然的用户 - 当你点击GitHub中的"新拉请求"时,GitHub:refs/pull/number/merge

  • 创建一个名为的引用,以保存您要求其他人为您合并的提交的ID;refs/pull/number/head
  • 尝试执行自动合并和提交(使用git merge),如果成功,则创建名为的第二个引用.refs/pull/number/merge

请注意,这个自动创建的合并提交不在任何分支上,它只是分配了相同的pull-request编号,并且引用的名称在pull-request本身中很明显(只需替换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
Run Code Online (Sandbox Code Playgroud)

(这个特定的代码序列与索引混淆,并且离开了HEAD,因此必须使用存储库锁定和后期工作清理,或者使用临时工作树;实际的代码序列可能不同于任何数量的原因).

因此:

所以,有人应该将我的分支合并到主人并创建相应的引用.是GitHub还是Travis?

考虑到GitHub ,Ockham的William会建议没有必要援引特拉维斯.:-)

另一个问题,我可以列出GitHub repo的所有引用吗?

只要您有权访问:

$ git ls-remote
Run Code Online (Sandbox Code Playgroud)

(假设遥控器是GitHub URL)将显示所有公开的引用.我还没有看到Web界面的方法来做到这一点,也没有找到我(轻)阅读GitHub API文档.

  • @x-yuri:更准确地说,除非你给它一个参数,否则`git ls-rmote` 会查找当前分支的`remote` 设置。参数可以是远程的名称(如 `origin` 或 `upstream`),在这种情况下,`git ls-remote` 从中查找 URL,或者可能是一个 URL。一旦 Git 获得了 URL,它就会调用通常的 `git fetch` 操作的第一部分,从另一个 Git 请求所有公共引用的列表。 (2认同)

Tho*_*est 8

一个答案提到git ls-remote- 虽然这通常适用于我的用例,但我需要列出 git认为遥控器具有的内容 - 例如。当服务器管理员清理我过时的远程存储库时,我想使用本地 git 克隆来恢复它们。

要列出我曾经使用过的所有已知远程引用ls .git/refs/remotes/<name>/- 事实证明在某些情况下这是不够的,例如在git-p4存储库上我的远程引用之一仅在.git/packed-refs.

使用git branch -r可以工作,但输出不能清晰地解析,并且需要 grep 所需的远程引用。

经过一番挖掘后,我最终使用了git for-each-ref

git for-each-ref --format="%(refname)" refs/remotes/<name>/
Run Code Online (Sandbox Code Playgroud)

注意:git show-ref还可以列出引用,但模式锚定到完整引用名称的末尾,并且仅匹配完整组件,因此仅当您知道所需的分支名称或列出所有引用并 grep 它们时,它才有用。我想要一些整洁、适合吊带衫的东西。


cmc*_*nty 5

如果您只想要回购中所有引用的列表,则可以运行:

git show-ref

这将在下面打印<SHA> <NAME>每个参考的.git/refs/*

  • 这不是OP所要求的——他们要求在遥控器上提供参考;不在本地存储库上。 (4认同)