- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一堆存储库,其中许多提交不包含在任何分支中,但仅由于标记而保持事件状态。我想列出所有这些标签。还没有弄清楚,如何做到这一点。有没有人有想法,如何实现?
最佳答案
标签不是来自 提交,它们只是指向 提交。但是你的问题确实有答案——只是措辞有点奇怪。更准确的措辞让我们找到了答案:
How, for each tag, can I test whether the commit the tag identifies is contained within any branch?
因此我们想对每个标签进行操作并进行一些测试。有枚举每个标签的命令。出于脚本目的,git for-each-ref
是最好的1 工具。所以我们开始:
git for-each-ref refs/tags
它打印出所有标签(到它的标准输出)以及关于每个标签的目标的额外信息:
$ git for-each-ref refs/tags
04c6e9e9ca34226db095bbaa1218030f99f0b7c6 commit refs/tags/a
d5aef6e4d58cfe1549adef5b436f3ace984e8c86 tag refs/tags/b
例如。 a
标签直接进入提交,即是一个轻量级标签; b
标记转到带注释的标记对象。
这还不是解决方案,但它让我们到达了那里。接下来我们要做的是找出带注释的标记的目标是否是提交对象,如果是,则找到提交对象的哈希值。事实证明 git for-each-ref
本身可以做到这一点,使用 --format
指令 %(*objecttype)
和 %(*对象名称)
。令人恼火的是,当标签是轻量级标签时,这些 %(*...)
指令什么都不会,这需要一些小技巧:
git for-each-ref \
--format='%(refname) %(objecttype) %(objectname) %(*objecttype) %(*objectname)' \
refs/tags
(出于发布目的,我已将其分成多行;在脚本中,我们可以只有一个长行而没有反斜杠换行符序列)。
这会生成一系列行作为其输出,每行三列或五列。前三列是引用名称、对象类型(可能是“标签”)、初始标签哈希 ID,如果存在最后两列,则是目标类型和最终目标 ID。我们需要将这些提供给 shell 脚本:
git for-each-ref \
--format='%(refname) %(objecttype) %(objectname) %(*objecttype) %(*objectname)' \
refs/tags |
while read name dtype dobj itype iobj; do
...
done
现在,在 ...
部分,我们实现测试:直接或间接对象是提交,如果是,是否可以通过任何分支名称访问它?
“对象是否提交”测试非常简单。不过,首先,让我们使用间接对象和名称(如果存在),否则使用直接对象和名称:
if [ $dtype = tag ]; then
otype=$itype obj=$iobj
else
otype=$dtype obj=$dobj
fi
现在我们将跳过非提交对象:
[ $otype == commit ] || continue
最后,我们将测试是否可以从某个分支名称访问对象的哈希 ID:
n=$(git for-each-ref refs/heads --contains $obj | wc -l)
此 for-each-ref
打印出到达给定对象的每个分支名称(以及 for-each-ref
通常的其他数据)。我们不关心实际名称,只关心是否有 任何名称,所以让我们计算内部 for-each-ref
打印了多少行。如果它为零,则此标记使此提交保持事件状态,所以让我们打印标记:
if [ $n -eq 0 ]; then
echo "tag $name keeps $obj alive"
fi
当我们运行整个过程时,有一个小缺陷:例如打印 tag refs/tags/a
。我们可以通过在初始 --format
中使用 %(refname:short)
来解决这个问题,我们将得到 tag a
。
因此,最终脚本如下:
git for-each-ref --format='%(refname:short) %(objecttype) %(objectname) %(*objecttype) %(*objectname)' refs/tags |
while read name dtype dobj itype iobj; do
if [ $dtype = tag ]; then
otype=$itype obj=$iobj
else
otype=$dtype obj=$dobj
fi
[ $otype == commit ] || continue
n=$(git for-each-ref refs/heads --contains $obj | wc -l)
if [ $n -eq 0 ]; then
echo "tag $name keeps $obj alive"
fi
done
(我已经将它添加到 GitHub here。该脚本可以进行一些改进以使其采用 Git 选项等,但现在我不太在意。它也很慢,这可能是通过将其编写为非常简单的 shell 脚本以外的东西来改进,但请参阅前面的评论。)
1Best 是那些难以衡量的事物之一,但至少我发现它是最好的。
关于git - 如何列出未包含在任何分支中的提交中的所有标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64620708/
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!