几天前,我一直试图确定哪个版本由标签指定 - 部署了一个特定的修复程序 - 由提交指定。此处的一些帖子发布了git tag --contains
是收集此信息的方式,但是the documentation of the option对我来说似乎很模糊:
- 包含[commit]: 仅列出包含指定提交的标记(如果未指定,则为HEAD)。
到目前为止,我正在阅读git is just a pointer to a specific commit中的标记,因此不清楚提交引用如何能够包含""另一个提交引用。你知道git tag --contains
如何获得它产生的信息吗?
答案 0 :(得分:1)
当标记包含另一个提交时,表示此提交是其祖先之一。
答案 1 :(得分:1)
因此不清楚提交引用如何“包含”另一个提交引用
您可以在git中引入/增强此功能的提交中看到更多内容 参见:
shepmaster
)。gitster
--合并,2009年1月28日) peff
)
(由Junio C Hamano -- gitster
--合并,2011年6月12日) 这最初是通过git merge-base完成的,但是:
加快
--contains
计算当我们想知道commit
A
是否包含commitB
(或一组提交中的任何一个,B
到Z
)时,我们通常会计算合并如果B
是 A 的合并基础(或者对于一个集合,如果任何提交B
到Z
具有该属性),则查看基数。< / p>当我们要检查一系列提交
A1
到An
时,看看每个提交是否包含B
(例如,因为我们决定使用“{{1我们做了一系列合并基础计算。这可能非常昂贵,因为我们重复了很多遍历工作。相反,让我们利用这样一个事实:我们将为每个标记使用相同的
git tag --contains
列表,并且标记提交图的区域肯定包含这些提交,或者肯定不包含这些提交。
然后,稍后标签可以在看到先前计算后立即停止遍历 答案。
这是通过递归完成的,但是......
commit cbc60b6见Jean-Jacques Lafay (DontKnowPS
)(2014年4月24日,git 2.1.0-rc0)。{
(由Junio C Hamano -- gitster
--合并,2014年4月25日)
--contains
:避免堆栈溢出在大型repos中,
git tag --contains
的递归实现可能导致堆栈溢出。用循环替换递归来修复它。这个问题在Windows上比在堆栈上的Linux更明显 默认情况下更受限制。另请参阅this thread on the msysGit list。