如何列出所有远程引用?
How do I list all remote refs?
最近我在 GitHub 上创建了一个 PR,但一些测试失败了。而在本地甚至更多的测试没有通过。所以我试图找出问题所在。
我发现 Travis 正在测试 other commit 我没有的回购协议。参考号是 refs/pull/81/merge。因此,据说有人将我的分支合并到 master 中并创建了相应的 ref。是 GitHub 还是特拉维斯?
另一个问题,我可以列出 GitHub 存储库的所有参考文献吗?
我对 Travis 本身一无所知,但 GitHub 实际上创建了这些 refs/pull/<em>number</em>/merge
参考文献。特别是,根据观察——文档似乎有点简陋,我只是一个有点随意的 GitHub 用户——当你在 GitHub、GitHub 中单击 "new pull request" 时:
- 创建一个名为
refs/pull/<em>number</em>/head
的引用以保存您向其他人询问的提交 ID为您合并;
- 尝试执行自动合并和提交(使用
git merge
),并且 如果成功,创建第二个引用 refs/pull/<em>数</em>/合并
.
请注意,这个自动创建的合并提交不在 任何 分支上,它只是分配了相同的拉取请求编号,以及一个名称从拉取中显而易见的引用-请求本身(只需将 head
替换为 merge
)。我相信——但还没有手动测试——这个合并的第一个父级是你请求某人 "on" 当 他们 做 same 合并,即创建此 refs/pull/<em>number</em>/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
分离,所以它必须在存储库锁定和 post 工作清理的情况下完成,或者使用临时工作-tree;由于多种原因,实际代码序列可能不同)。
因此:
So, somebody supposedly merged my branch into the master and created corresponding ref. Was it GitHub or Travis?
鉴于 GitHub 将 ,William of Ockham 将建议无需调用 Travis。 :-)
And the other question, can I list all the refs GitHub repo has?
只要您有权限:
$ git ls-remote
(假设遥控器是 GitHub URL)将显示所有暴露的引用。我还没有看到执行此操作的 Web 界面方法,在我(轻度)阅读 GitHub API 文档时也没有找到。
如果你只想在你的 repo 中获得所有引用的列表,你可以 运行:
git show-ref
这将打印 .git/refs/*
下每个参考的 <SHA> <NAME>
一个答案提到了 git ls-remote
- 虽然这对我的用例来说通常有效,但我需要列出遥控器 git 认为 的内容 - 例如.当服务器的管理员清理我陈旧的远程存储库并且我想使用我的本地 git 克隆恢复它们时。
列出我曾经使用过的所有已知远程引用 ls .git/refs/remotes/<name>/
- 事实证明在某些情况下它是不够的,例如在 git-p4
存储库中我的远程引用之一仅在 .git/packed-refs
.
使用 git branch -r
可以,但输出无法清晰地解析,需要 grep'ing 所需的远程引用。
经过一番挖掘,我最终使用了 git for-each-ref
:
git for-each-ref --format="%(refname)" refs/remotes/<name>/
注意:git show-refs
也可以列出引用,但模式锚定在完整引用名称的末尾并且只匹配完整的组件,所以只有当你知道你想要什么分支名称时它才有用列出所有 refs 并 grep 它们。我想要一些整洁的东西,很适合放在单衬里。
最近我在 GitHub 上创建了一个 PR,但一些测试失败了。而在本地甚至更多的测试没有通过。所以我试图找出问题所在。
我发现 Travis 正在测试 other commit 我没有的回购协议。参考号是 refs/pull/81/merge。因此,据说有人将我的分支合并到 master 中并创建了相应的 ref。是 GitHub 还是特拉维斯?
另一个问题,我可以列出 GitHub 存储库的所有参考文献吗?
我对 Travis 本身一无所知,但 GitHub 实际上创建了这些 refs/pull/<em>number</em>/merge
参考文献。特别是,根据观察——文档似乎有点简陋,我只是一个有点随意的 GitHub 用户——当你在 GitHub、GitHub 中单击 "new pull request" 时:
- 创建一个名为
refs/pull/<em>number</em>/head
的引用以保存您向其他人询问的提交 ID为您合并; - 尝试执行自动合并和提交(使用
git merge
),并且 如果成功,创建第二个引用refs/pull/<em>数</em>/合并
.
请注意,这个自动创建的合并提交不在 任何 分支上,它只是分配了相同的拉取请求编号,以及一个名称从拉取中显而易见的引用-请求本身(只需将 head
替换为 merge
)。我相信——但还没有手动测试——这个合并的第一个父级是你请求某人 "on" 当 他们 做 same 合并,即创建此 refs/pull/<em>number</em>/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
分离,所以它必须在存储库锁定和 post 工作清理的情况下完成,或者使用临时工作-tree;由于多种原因,实际代码序列可能不同)。
因此:
So, somebody supposedly merged my branch into the master and created corresponding ref. Was it GitHub or Travis?
鉴于 GitHub 将 ,William of Ockham 将建议无需调用 Travis。 :-)
And the other question, can I list all the refs GitHub repo has?
只要您有权限:
$ git ls-remote
(假设遥控器是 GitHub URL)将显示所有暴露的引用。我还没有看到执行此操作的 Web 界面方法,在我(轻度)阅读 GitHub API 文档时也没有找到。
如果你只想在你的 repo 中获得所有引用的列表,你可以 运行:
git show-ref
这将打印 .git/refs/*
<SHA> <NAME>
一个答案提到了 git ls-remote
- 虽然这对我的用例来说通常有效,但我需要列出遥控器 git 认为 的内容 - 例如.当服务器的管理员清理我陈旧的远程存储库并且我想使用我的本地 git 克隆恢复它们时。
列出我曾经使用过的所有已知远程引用 ls .git/refs/remotes/<name>/
- 事实证明在某些情况下它是不够的,例如在 git-p4
存储库中我的远程引用之一仅在 .git/packed-refs
.
使用 git branch -r
可以,但输出无法清晰地解析,需要 grep'ing 所需的远程引用。
经过一番挖掘,我最终使用了 git for-each-ref
:
git for-each-ref --format="%(refname)" refs/remotes/<name>/
注意:git show-refs
也可以列出引用,但模式锚定在完整引用名称的末尾并且只匹配完整的组件,所以只有当你知道你想要什么分支名称时它才有用列出所有 refs 并 grep 它们。我想要一些整洁的东西,很适合放在单衬里。