首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >别名git分支,将"master“替换为"main”

别名git分支,将"master“替换为"main”
EN

Stack Overflow用户
提问于 2022-08-04 21:38:07
回答 3查看 132关注 0票数 0

我做了一堆不同的repos --其中许多使用master,很多使用main

我还为git命令设置了各种shell别名,例如用于gcmgit checkout master

问题是,在不存在master的情况下,我不能在repos上使用这些别名。这显然不是什么大不了的事,因为在这种情况下,我只需要手动输入命令,但这有点烦人。

我想知道是否有一种方法可以在git中“别名”分支,所以当我说git push origin master时,它可以自动地用main替换它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-05 07:16:30

在有main但没有master的存储库中,最简单的方法是创建指向main的分支别名master

代码语言:javascript
复制
git symbolic-ref refs/heads/master refs/heads/main

这给出了以下分支的列表(例如):

代码语言:javascript
复制
$ git branch -a
* main
  master -> main
  side

现在,每当您的命令引用master时,它们都应用于main。即使您按master,实际的目标也是main

代码语言:javascript
复制
$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 241 bytes | 241.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To ../gitupstream
   f57e131..15c1aad  master -> main
票数 2
EN

Stack Overflow用户

发布于 2022-08-04 21:44:15

您可以使用git show-ref -q来检查分支是否存在:

代码语言:javascript
复制
alias gcm='git show-ref -q --heads main && git checkout main || git checkout master'

您可以编写一个shell函数来返回默认的分支名称:

代码语言:javascript
复制
default_branch_name() {
    git show-ref -q --heads main && echo main || echo master
}

alias gcm="git checkout $(default_branch_name)"

这可能简化了编写附加别名的工作。

以上只假定主分支有两个可能的名称。当然,您可以查看更多信息:

代码语言:javascript
复制
default_branch_name() {
    for name in master trunk main; do
        git show-ref -q --heads $name && break
    done

    echo $name
}
票数 2
EN

Stack Overflow用户

发布于 2022-08-05 15:38:36

我个人喜欢j6t's answer,但请注意,当您运行git clone时,原始存储库中的默认分支在映射到远程跟踪名称之后,将成为origin/HEAD符号引用名称。因此,您可以使用git rev-parse --symbolic-full-name refs/remotes/origin/HEAD来发现这是refs/remotes/origin/masterrefs/remotes/origin/main还是其他值。

使用该结果,您可以选择是使用名称mainmaster,还是使用其他值。

对于源的默认分支为develop的存储库,这意味着您可以解析为develop。如果这是你想要的,那很好。

您可以将这些想法结合起来:在git clone之后(可能不是git clone)之后,运行一个脚本来读取:

代码语言:javascript
复制
#! /bin/sh
rhead=$(git rev-parse --symbolic-full-name origin/HEAD) || {
    echo "can't figure out default, not creating symbolic name"
    exit 1
}
rhead=${rhead#refs/remotes/origin/}
case "$rhead" in
master) ;; # do nothing
*)
    git symbolic-ref refs/heads/master "refs/heads/$rhead"
    echo "master -> $rhead"
    ;;
esac
exit 0

(注:以上均未经测试)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73242448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档