gpt4 book ai didi

ruby - 实现 git branch --contains with rugged library

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:47 27 4
gpt4 key购买 nike

我正在使用 ruby​​ 脚本在给定的 git 存储库上执行以下 git 命令。

  branches = `git branch -a --contains #{tag_name}`

这种方法在命令输出方面有一些缺点(可能会在不同的 git 版本中发生变化)并且受主机上 git 二进制版本的影响,所以我试图看看是否可以使用 rugged 替换该命令但我找不到类似的东西。

也许在 rugged 中没有办法实现 --contains 标志,但我认为实现这种行为应该很容易:

给定任何 git commit-ish(标签、提交 sha 等)如何获取(坚固耐用)包含该提交的分支列表(本地和远程) ?

我需要实现类似 github commit show page 的东西,即 tag xyz 包含在 master、develop、branch_xx 中

最佳答案

最后用 this code 解决了:

def branches_for_tag(tag_name, repo_path = Dir.pwd)
@branches ||= begin
repo = Rugged::Repository.new(repo_path)
# Convert tag to sha1 if matching tag found
full_sha = repo.tags[tag_name] ? repo.tags[tag_name].target_id : tag_name
logger.debug "Inspecting repo at #{repo.path}, branches are #{repo.branches.map(&:name)}"
# descendant_of? does not return true for it self, i.e. repo.descendant_of?(x, x) will return false for every commit
# @see https://github.com/libgit2/libgit2/pull/4362
repo.branches.select { |branch| repo.descendant_of?(branch.target_id, full_sha) || full_sha == branch.target_id }
end
end

关于ruby - 实现 git branch --contains with rugged library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058021/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com