【问题标题】:How to alias a tag in Git?如何在 Git 中给标签起别名?
【发布时间】:2015-02-16 09:48:22
【问题描述】:

我有一个 Git 命令别名来检查存储库中的最新标签:

~/.gitconfig:

checkout-latest = !git checkout $(git describe --tags `git rev-list --tags --max-count=1`)

所以我可以在这样正确标记的存储库中使用它:

$ git checkout-latest

我有 checkout 命令的命令别名:

~/.gitconfig:

co = checkout

checkout-latest 不适用于结帐的命令别名:

$ git co-latest
git: 'co-latest' is not a git command. See 'git --help'.

如何配置 Git 以便可以使用 latest 作为指向以编程方式确定的最新标签的标签别名?我想这样使用它:

$ git checkout latest

$ git co latest

请注意,在我想要的变体中,子命令和标签之间没有破折号

【问题讨论】:

  • 如果你想让co-latest 工作,只需添加它:co-latest = !git checkout-latest。如果不维护一个实际的标签latest,我认为你不能做你想做的事。
  • 是的,可以。但我既不想在每个 repo 中维护 latest 标签,也不想混淆子命令和标签的语法。
  • co-latestgit 的子命令,而git checkout latest 是命令、子命令和标签别名。我认为在子命令级别引用标签的东西很难看。
  • 我明白了。我认为这是您得出的任意区别,并且严重限制了您可以使用别名做的事情,但这不是我的电话。我不相信您可以在这里做您想做的事情(除非您将 git 本身包装在一个 shell 函数中并根据子命令和“tag/ref”参数进行调度。

标签: git shell aliases subcommand


【解决方案1】:

Git 别名不能引用其他别名。

但是,您可以通过另一层间接来完成此操作:

co-latest = !git checkout-latest "$@"

【讨论】:

  • 虽然很有趣,但这并不能回答我的问题。我不想创建更多的子命令别名。我想摆脱我拥有的那个,并在标签级别使用别名获得更好的功能。
【解决方案2】:

我能想到的唯一解决方案是git shell 函数,它根据参数进行“调度”。

类似这样的:

git() {
    if [ "$1" != checkout ] || [ "$#" -ne 2 ]; then
        git "$@"
        return
    fi

    local lastrev lasttag

    case $2 in
        :latest)
            lastrev=$(git rev-list --tags --max-count=1)
            set -- checkout "$(git describe --tags "$lastrev")"
        ;;
    esac

    git "$@"
}

标签别名需要像普通引用一样无效才能安全使用check-ref-format

此构造允许通过 case 语句添加任意标签“别名”。

如果你想使用标签“别名”,这个函数非常限制了可以使用的参数。具体来说,你不能通过任何。命令必须git checkout <alias>。现在解析所有有效的git checkout 组合实在是太难了(尽管它可能已经完成了)。

【讨论】:

    【解决方案3】:

    Git 已经可以为标签设置别名,因为您可以创建一个新标签,该标签指向与另一个标签相同的提交。

    你似乎想要的是一个宏别名;让 Git 识别像 latest 这样的特殊词,并用标签动态替换它。

    由于不修改 Git 可能不会发生这种情况,因此您可以让 shell 执行此操作,并通过 $(...) 命令替换进行插值:

    git checkout $(latest)
    

    latest 只是一个 shell 脚本或函数,可以动态计算标签并将其打印在标准输出上。

    另一个想法是在 repo 中安装一个实际的 latest 标签作为别名。当标记了新的更改时,latest 会被推送到该更改(通过git tag -F)。当然,这样的标记是一种非快进更改,因此上游 repo 必须允许这样做。

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2021-12-12
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 2018-08-13
      • 2010-12-13
      • 1970-01-01
      相关资源
      最近更新 更多