Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 获取特定分支的标记_Git_Go_Go Git - Fatal编程技术网

Git 获取特定分支的标记

Git 获取特定分支的标记,git,go,go-git,Git,Go,Go Git,使用:是否有办法只获取特定分支的(轻量级和带注释的)标记 由于我主要对主分支的标记感兴趣,类似于git-tag--merged的东西也就足够了 像Tags()..这样的基本go-git方法似乎不可能实现这一点,但下面的代码实现了这一目标: 读取整个分支的提交哈希 读取存储库的所有标记 选中并仅打印哈希位于分支中的标记 注意:尚未尝试使用带注释的标记。但应该很接近 主程序包 进口( “日志” “github.com/src-d/go-billy/memfs” “gopkg.in/src-d/go-

使用:是否有办法只获取特定分支的(轻量级和带注释的)标记

由于我主要对主分支的标记感兴趣,类似于
git-tag--merged
的东西也就足够了


Tags()
..

这样的基本go-git方法似乎不可能实现这一点,但下面的代码实现了这一目标:

  • 读取整个分支的提交哈希
  • 读取存储库的所有标记
  • 选中并仅打印哈希位于分支中的标记
  • 注意:尚未尝试使用带注释的标记。但应该很接近

    主程序包
    进口(
    “日志”
    “github.com/src-d/go-billy/memfs”
    “gopkg.in/src-d/go-git.v4”
    “gopkg.in/src-d/go-git.v4/peoping”
    “gopkg.in/src-d/go-git.v4/pipping/object”
    “gopkg.in/src-d/go-git.v4/storage/memory”
    )
    func getbranchhash(repo*git.Repository,branchName字符串)(散列映射[pipeoping.Hash]bool,err error){
    //获取分支引用名称
    分行,错误:=回购分行(“主分行”)
    如果错误!=零{
    返回
    }
    //获取引用名称的引用
    ref,err:=repo.Reference(branch.Merge,true)
    如果错误!=零{
    返回
    }
    //从分支引用提交中检索日志
    //(默认顺序为深度优先)
    日志,err:=repo.Log(&git.LogOptions){
    From:ref.Hash(),
    })
    如果错误!=零{
    返回
    }
    延迟日志。关闭()
    //收集所有散列的通道
    chHash:=make(chan.Hash)
    chErr:=制造(chan错误)
    go func(){
    err=logs.ForEach(func(commit*object.commit)(err error){
    
    chHash啊,你的问题是关于
    go git
    ?是的,很抱歉误解了…支持每-
    tag
    操作。
    git tag--merged
    不起作用吗?没有“分支标记”这样的东西.标记只是标记:它们只是某些特定提交的名称。然而,分支这个词是不明确的:请参阅-如果您指的是分支名称,那么这些名称再次只是特定提交的名称,但这些名称会随着时间的推移而变化,也就是说,更改它们所指的特定提交。也就是说,请注意,
    git标记--merged
    意味着:对于每个标记,检查标记是否标识了作为当前提交祖先的提交;如果是,则打印该标记,使其仅为:
    for t:=range tags{if t.is_祖先(当前){print t t}}}
    (如何将其映射到git,我不确定)注意,Git自己的is祖先测试认为任何提交H都是H的祖先:它实际上是一个preferences或equals操作符。