如何列出包含特定存储库上给定提交的分支?
How to list branches that contain a given commit on a specific repository?
所以我阅读了 Git: How to find out on which branch tag is? 和许多其他帖子并且我已经知道如何使用:
git branch --contains tag
但是,我仍然需要知道如何在特定存储库中列出包含给定提交(或标记)的分支。
背景
我使用以下方法从远程存储库 archive
中提取了标签列表:
git ls-remote --tags archive
现在,对于提取的每个标签,我希望获得包含分支的列表。
使用命令:
git branch --contains tag
没有帮助,因为找不到标签,因为它们不存在于 origin
存储库中。
考虑到您声明的限制条件(具体来说,您有从 tag-name 到 SHA-1 ID 的映射并且根本没有其他信息),您无法得到您想要的。
谓词定义:
branch name contains commit id
只是 id 是 name[=34= 的 SHA-1 的祖先1 ] 地图。要测试此命题,您必须能够遍历该图,从 name 映射到的节点开始,然后遍历图中的所有路径,直到您 运行 出节点数,或者遇到给定的 id.
不过,要遍历该图,您必须拥有该图。
这意味着只有两种方法可以找到答案:自己拥有图表,或者找一些拥有图表的实体来为您解答问题。 git 和 git 服务器没有内置任何内容来执行后者(尽管有些服务器可能会提供 add-on)。
另一方面,如果你可以运行 git ls-remote
,你也可以检索存储库,因此你可以自己回答这个问题(当然是以检索存储库为代价的).
1为了这个定义的目的,一个节点是它自己的祖先。在这种特殊的退化情况下(标记和分支的提示匹配),当然,您可以通过查看分支提示的 SHA-1 ID 立即回答问题,这些值可通过 git ls-remote
.
需要git branch
--all
--contains
commit
才能看到来自其他遥控器的分支。
这仍然取决于您从它们所在的任何远程获取要检查的提交 - git fetch archive
在您的情况下。
没有它,您的本地存储库就没有提交,而且几乎什么也做不了。例如,如果没有提交,你不能 git log
等。有各种各样的 (semi-working) 解决方法,比如通过 SSH 连接到服务器并对其进行处理(如果可用)或使用各种 Web API(GitHub、Stash)(如果可用),但基本上你需要提交提交。 git ls-remote
是一个例外,它可以在远程存储库上工作而无需本地任何东西。
所以我阅读了 Git: How to find out on which branch tag is? 和许多其他帖子并且我已经知道如何使用:
git branch --contains tag
但是,我仍然需要知道如何在特定存储库中列出包含给定提交(或标记)的分支。
背景
我使用以下方法从远程存储库 archive
中提取了标签列表:
git ls-remote --tags archive
现在,对于提取的每个标签,我希望获得包含分支的列表。
使用命令:
git branch --contains tag
没有帮助,因为找不到标签,因为它们不存在于 origin
存储库中。
考虑到您声明的限制条件(具体来说,您有从 tag-name 到 SHA-1 ID 的映射并且根本没有其他信息),您无法得到您想要的。
谓词定义:
branch name contains commit id
只是 id 是 name[=34= 的 SHA-1 的祖先1 ] 地图。要测试此命题,您必须能够遍历该图,从 name 映射到的节点开始,然后遍历图中的所有路径,直到您 运行 出节点数,或者遇到给定的 id.
不过,要遍历该图,您必须拥有该图。
这意味着只有两种方法可以找到答案:自己拥有图表,或者找一些拥有图表的实体来为您解答问题。 git 和 git 服务器没有内置任何内容来执行后者(尽管有些服务器可能会提供 add-on)。
另一方面,如果你可以运行 git ls-remote
,你也可以检索存储库,因此你可以自己回答这个问题(当然是以检索存储库为代价的).
1为了这个定义的目的,一个节点是它自己的祖先。在这种特殊的退化情况下(标记和分支的提示匹配),当然,您可以通过查看分支提示的 SHA-1 ID 立即回答问题,这些值可通过 git ls-remote
.
需要git branch
--all
--contains
commit
才能看到来自其他遥控器的分支。
这仍然取决于您从它们所在的任何远程获取要检查的提交 - git fetch archive
在您的情况下。
没有它,您的本地存储库就没有提交,而且几乎什么也做不了。例如,如果没有提交,你不能 git log
等。有各种各样的 (semi-working) 解决方法,比如通过 SSH 连接到服务器并对其进行处理(如果可用)或使用各种 Web API(GitHub、Stash)(如果可用),但基本上你需要提交提交。 git ls-remote
是一个例外,它可以在远程存储库上工作而无需本地任何东西。