mark Asked: 2024-04-17 23:44:31 +0800 CST2024-04-17 23:44:31 +0800 CST 2024-04-17 23:44:31 +0800 CST 是否可以将 git fetch -f --tags 限制为仅匹配给定模式和给定时间窗口(例如,自过去 24 小时以来)的标签? 772 当我运行时,git fetch -f --tags它会获取大量标签,并且需要相当长的时间才能运行。实际上,我只需要与上次运行命令以来创建的特定名称模式相匹配的标签。但如果这两个条件都不可能的话,我会很满意能够提供其中一个条件。 有办法做到吗? git 2 个回答 Voted Best Answer ddtraveller 2024-04-17T23:53:21+08:002024-04-17T23:53:21+08:00 将 abc123 替换为您要获取的标签名称。 git fetch origin 'refs/tags/abc123*:refs/tags/abc123*' 您可以像这样列出标签; git tag -l 'abc123*' jthill 2024-04-18T01:03:34+08:002024-04-18T01:03:34+08:00 与模式匹配并指向获取的历史记录的标签已经足够偏离常规,您必须自己构建它。 这并不难,Git 提供了您完成此操作所需的所有数据。我可以立即想到两种方法:获取所有标签,然后删除与模式不匹配的任何新标签,最初不获取任何标签,然后返回并获取与该模式匹配且指向该历史记录的任何标签。 我的第一次尝试是第一种方法,完全获取,然后删除不需要的标签引用, git fetch -f && awk ' $3~/^tag/ { split($3,memo,"'\''") if (memo[2]!~/^abc.*/) print "delete",memo[2] } ' FS=$'\t' .git/FETCH_HEAD \ | git update-ref --stdin 另一种方法是git verify-pack -v从 产生的包git fetch -nfk,git ls-remote对于与您的模式匹配的所有远程标记,并显式获取任何指向您在该包中找到的提交的内容。 对于替代方法,在最新的包中提交: git verify-pack -v $(find .git/objects/pack -type f -exec ls -t {} + | sed q) \ | awk '$2=="commit" { print $1 }' 与模式匹配的原始标签: git ls-remote origin refs/tags/abc123\* 以及此方法的其余重新格式化和选择,我将作为练习留下,因为我就是这样。
将 abc123 替换为您要获取的标签名称。
git fetch origin 'refs/tags/abc123*:refs/tags/abc123*'
您可以像这样列出标签;
git tag -l 'abc123*'
与模式匹配并指向获取的历史记录的标签已经足够偏离常规,您必须自己构建它。
这并不难,Git 提供了您完成此操作所需的所有数据。我可以立即想到两种方法:获取所有标签,然后删除与模式不匹配的任何新标签,最初不获取任何标签,然后返回并获取与该模式匹配且指向该历史记录的任何标签。
我的第一次尝试是第一种方法,完全获取,然后删除不需要的标签引用,
另一种方法是
git verify-pack -v
从 产生的包git fetch -nfk
,git ls-remote
对于与您的模式匹配的所有远程标记,并显式获取任何指向您在该包中找到的提交的内容。对于替代方法,在最新的包中提交:
与模式匹配的原始标签:
以及此方法的其余重新格式化和选择,我将作为练习留下,因为我就是这样。