在 Neovim 中检索 git_main_branch
Retrieve git_main_branch in Neovim
所以我最近对 Neovim/Spacevim 非常熟悉,它太棒了!
我正在设置一些个人键绑定和命令以及你有什么,目前正在处理 Git 东西。
来自使用 VSCode 和 iTerm2,当想要从任何分支切换到 master
或 main
或任何 main 分支时是的,我有一个别名如下:
alias gcom=git checkout $(git_main_branch)
我只需在终端中输入 gcom
,它就会自动切换到 main 分支。不幸的是,在 Neovim 中,git_main_branch
不是一个东西,所以我试图找出一个等价物,我可以在 Neovim 命令提示符中执行类似类型 :Gcom
的操作,然后它切换到主分支。
我试图在我的 init.vim
文件中设置这样的功能(我安装了 coc
和所有相应的 Git 插件,包括 fugitive
):
function! GitCheckoutMain()
let gitMainBranch = system('git_main_branch')
execute "normal! :Git checkout" . gitMainBranch
endfunction
然后设置类似
的命令
command! Gcom :call GitCheckoutMain()
但这并不能解决问题。有谁知道我如何用 Neovim 完成这个?谢谢!
好的,所以我想我实际上可能已经想出了解决这个问题的方法。我将 GitCheckoutMain
函数从最初的 post 更改为如下:
function GitCheckoutMain()
let mainGitBranch = system('git branch | grep -o -m1 "\b\(master\|main\)\b"')
echo mainGitBranch
endfunction
我从上面将它绑定到我的 Gcom
命令,当我从 Neovim 终端 运行 :Gcom
时,它打印出 master
在这种情况下master
是 main 分支的回购协议。还将在主分支为 main
的回购协议中对此进行测试,但我认为这会做我想要的...
编辑:这确实有效!这是我的完整代码,供任何感兴趣的人使用。
function GitCheckoutMain()
let mainGitBranch = system('git branch | grep -o -m1 "\b\(master\|main\)\b"')
execute "normal! :Git checkout " . mainGitBranch
endfunction
...
command! Gcom :call GitCheckoutMain()
无论我在哪个分支,如果我在 Neovim 终端输入 :Gcom
,它都会将分支更改为 master
或 main
或任何 main 分支在该特定存储库中设置。哇哦!
我想感谢@dwelle 在这个帖子中 post 编辑的答案 - How to get the default for the master branch in Git? - 让我得到了最终结果!
这是一个绝妙的解决方案!只是想为此添加我自己的 2 美分。如果您使用 GitHub 作为存储库,并且安装了 GitHub CLI,您可以通过键入
获取主要目标分支
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
这将打开另一种模式,它将列出主要分支的名称。我知道你已经到达了你需要的地方,但这可能是你可以实施的另一种 cleaner 方法。
所以我最近对 Neovim/Spacevim 非常熟悉,它太棒了!
我正在设置一些个人键绑定和命令以及你有什么,目前正在处理 Git 东西。
来自使用 VSCode 和 iTerm2,当想要从任何分支切换到 master
或 main
或任何 main 分支时是的,我有一个别名如下:
alias gcom=git checkout $(git_main_branch)
我只需在终端中输入 gcom
,它就会自动切换到 main 分支。不幸的是,在 Neovim 中,git_main_branch
不是一个东西,所以我试图找出一个等价物,我可以在 Neovim 命令提示符中执行类似类型 :Gcom
的操作,然后它切换到主分支。
我试图在我的 init.vim
文件中设置这样的功能(我安装了 coc
和所有相应的 Git 插件,包括 fugitive
):
function! GitCheckoutMain()
let gitMainBranch = system('git_main_branch')
execute "normal! :Git checkout" . gitMainBranch
endfunction
然后设置类似
的命令command! Gcom :call GitCheckoutMain()
但这并不能解决问题。有谁知道我如何用 Neovim 完成这个?谢谢!
好的,所以我想我实际上可能已经想出了解决这个问题的方法。我将 GitCheckoutMain
函数从最初的 post 更改为如下:
function GitCheckoutMain()
let mainGitBranch = system('git branch | grep -o -m1 "\b\(master\|main\)\b"')
echo mainGitBranch
endfunction
我从上面将它绑定到我的 Gcom
命令,当我从 Neovim 终端 运行 :Gcom
时,它打印出 master
在这种情况下master
是 main 分支的回购协议。还将在主分支为 main
的回购协议中对此进行测试,但我认为这会做我想要的...
编辑:这确实有效!这是我的完整代码,供任何感兴趣的人使用。
function GitCheckoutMain()
let mainGitBranch = system('git branch | grep -o -m1 "\b\(master\|main\)\b"')
execute "normal! :Git checkout " . mainGitBranch
endfunction
...
command! Gcom :call GitCheckoutMain()
无论我在哪个分支,如果我在 Neovim 终端输入 :Gcom
,它都会将分支更改为 master
或 main
或任何 main 分支在该特定存储库中设置。哇哦!
我想感谢@dwelle 在这个帖子中 post 编辑的答案 - How to get the default for the master branch in Git? - 让我得到了最终结果!
这是一个绝妙的解决方案!只是想为此添加我自己的 2 美分。如果您使用 GitHub 作为存储库,并且安装了 GitHub CLI,您可以通过键入
获取主要目标分支gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
这将打开另一种模式,它将列出主要分支的名称。我知道你已经到达了你需要的地方,但这可能是你可以实施的另一种 cleaner 方法。