Git 如何在特定存储库中列出包含给定提交的分支?
因此,我已经阅读了许多其他帖子,我已经知道如何使用:Git 如何在特定存储库中列出包含给定提交的分支?,git,git-branch,git-tag,Git,Git Branch,Git Tag,因此,我已经阅读了许多其他帖子,我已经知道如何使用: git分支--包含标记 但是,我仍然需要知道如何在特定存储库中列出包含给定提交(或标记)的分支 背景 我已使用以下方法从远程存储库归档文件中提取了标记列表: git ls-remote --tags archive 现在,对于提取的每个标记,我希望获得包含分支的列表。 使用命令: git分支--包含标记 没有帮助,因为标记未找到,因为它们不存在于origin存储库中。鉴于您声明的限制(特别是,您有一个从标记名到SHA-1 ID的映射,并且没
git分支--包含标记
但是,我仍然需要知道如何在特定存储库中列出包含给定提交(或标记)的分支
背景
我已使用以下方法从远程存储库归档文件中提取了标记列表:
git ls-remote --tags archive
现在,对于提取的每个标记,我希望获得包含分支的列表。
使用命令:
git分支--包含标记
没有帮助,因为标记未找到,因为它们不存在于origin
存储库中。鉴于您声明的限制(特别是,您有一个从标记名到SHA-1 ID的映射,并且没有任何其他信息),您无法获得所需的内容
谓词的定义:
分支名称包含提交id
简单地说,id是名称映射到的SHA-1的ancestor1。要测试这一命题,您必须能够遍历图,从名称映射到的节点开始,遍历图中的所有路径,直到节点用完或遇到给定id为止
不过,要遍历图形,您必须拥有该图形
这意味着只有两种方法可以找到答案:自己绘制图表,或者让某个实体绘制图表来回答问题。git和git服务器没有内置任何东西来实现后者(尽管有些服务器可能会将其作为附加组件提供)
另一方面,如果您可以运行gitlsremote
,您也可以检索存储库,因此您可以自己回答这个问题(当然要以检索存储库为代价)
1在本定义中,节点是其自己的祖先。当然,在这种特殊的退化情况下(标记和分支尖端匹配),您可以通过查看分支尖端的SHA-1 ID立即回答问题,这些值可通过git ls remote
获得。您需要git branch
--all
--contains
提交
来查看来自其他远程的分支
这仍然取决于您从任何远程位置获取要检查的提交-git fetch archive
没有它,您的本地存储库就不会有提交,而且几乎什么都不会工作。例如,如果没有提交,就不能git log
等。有各种各样的(半工作)解决方法,比如对服务器进行SSHing并对其进行处理(如果有),或者使用各种web API(GitHub,Stash)(如果有),但基本上您需要提交git ls remote
是一个例外,它可以在远程存储库上工作,而不需要本地任何东西。您是否执行了git fetch archive
(或pull)?否。我没有。把它和你答案中的其他说明结合起来,就成功了。