我参与了几个项目,其中一些将 main
和一些 master
作为默认分支。我无法用一个或其他名称重命名所有项目,因为并非所有项目都由我管理。我知道 .gitconfig
别名系统非常广泛,所以我想知道是否有办法为涉及的每个命令接受这两个名称。到目前为止,我只找到了 this 但它涉及修改每个单独的命令并使用 !sh -c
这不是很“漂亮”。理想的做法是同时测试两个分支是否确实存在于 repo 中以避免错误。
我尝试在 .gitconfig master = main
部分的开头添加 [alias]
但它不起作用。
答案 0 :(得分:2)
我认为没有可行的方法来做到这一点。您可以通过在本地重命名分支来近似;这不会影响远程或任何其他用户,因此是否要管理“您的”项目并不重要。
git checkout master
git branch -m main
但我真的不推荐它。这样做的缺点(或者如果你可以让它工作的话,你最初的“别名”想法)是你可能会加强你对哪个存储库使用哪个名称的缺乏了解。对于需要远程跟踪引用名称(origin/master
或 origin/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
存在和/或不存在的每种组合进行测试。