接受主分支名称和主分支名称的 git 别名?

时间:2021-01-17 16:34:10

标签: git git-config

我参与了几个项目,其中一些将 main 和一些 master 作为默认分支。我无法用一个或其他名称重命名所有项目,因为并非所有项目都由我管理。我知道 .gitconfig 别名系统非常广泛,所以我想知道是否有办法为涉及的每个命令接受这两个名称。到目前为止,我只找到了 this 但它涉及修改每个单独的命令并使用 !sh -c 这不是很“漂亮”。理想的做法是同时测试两个分支是否确实存在于 repo 中以避免错误。
我尝试在 .gitconfig master = main 部分的开头添加 [alias] 但它不起作用。

3 个答案:

答案 0 :(得分:2)

我认为没有可行的方法来做到这一点。您可以通过在本地重命名分支来近似;这不会影响远程或任何其他用户,因此是否要管理“您的”项目并不重要。

git checkout master
git branch -m main

但我真的不推荐它。这样做的缺点(或者如果你可以让它工作的话,你最初的“别名”想法)是你可能会加强你对哪个存储库使用哪个名称的缺乏了解。对于需要远程跟踪引用名称(origin/masterorigin/main)的情况,以及与存储库的其他用户进行通信的情况,这可能会增加混淆。

答案 1 :(得分:1)

要查找远程存储库的default分支,无论名称如何,您都可以查看.git/refs/remote/<remote name>/HEAD

例如:

$ cat .git/refs/remotes/origin/HEAD
ref: refs/remotes/origin/master
$ awk -F "/" '{print $NF}' .git/refs/remotes/origin/HEAD
master

然后就可以切换到同名的本地分支了:

git switch $(awk -F "/" '{print $NF}' .git/refs/remotes/origin/HEAD)

答案 2 :(得分:0)

<块引用>

测试两个分支是否确实存在于 repo 中以避免错误。

特别是为了切换到默认分支,我在这个......过渡期间使用了这个bash函数。

gsm () {  # Switch to main or master branch
  git branch --list | grep ' master$'
  if   [[ $? -eq 0 ]]; then git switch master
  elif [[ $? -ne 0 ]]; then git branch --list | grep ' main$'
    if [[ $? -eq 0 ]]; then git switch main; fi
  else  # neither exists
    git switch -c main
  fi
}

不过,我还没有针对 master 和/或 main 存在和/或不存在的每种组合进行测试。

相关问题