0

所以我最近对 ​​Neovim/Spacevim 非常熟悉,这真是太棒了!

我正在设置一些个人键绑定和命令以及你有什么,目前正在研究 Git 的东西。

来自使用 VSCode 和 iTerm2,当想要从任何分支切换到主分支或master分支时,我有一个别名,如下所示:main

alias gcom=git checkout $(git_main_branch)

我可以gcom在终端输入,它会自动切换到分支。不幸的是,在 Neovim 中,git_main_branch这不是一回事,所以我试图找出一个等价物,我可以在其中执行类似输入:GcomNeovim 命令提示符的操作,然后切换到主分支。

init.vim我试图在我的文件中设置这样的功能(我已经coc安装了所有相应的 Git 插件,包括fugitive):

function! GitCheckoutMain()
  let gitMainBranch = system('git_main_branch')

  execute "normal! :Git checkout" . gitMainBranch
endfunction

然后设置一个命令

command! Gcom :call GitCheckoutMain()

但这并不能解决问题。有谁知道我如何用 Neovim 完成这个任务?谢谢!

4

2 回答 2

0

这是一个很好的解决方案!只是想为此添加我自己的 2 美分。如果您使用 GitHub 作为存储库,并且安装了 GitHub CLI,则可以通过键入获取主目标分支

gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'

这将打开另一种模式,该模式将列出主分支的名称。我知道你已经到了你需要的地方,但这可能是你可以实施的另一种更清洁的方法。

于 2021-11-19T16:57:48.973 回答
0

好的,所以我想我实际上可能已经想出了如何解决这个问题。我将我的GitCheckoutMain功能从最初的帖子更改为如下:

function GitCheckoutMain()
  let mainGitBranch = system('git branch | grep -o -m1 "\b\(master\|main\)\b"')

  echo mainGitBranch
endfunction

我从上面将它绑定到我的Gcom命令,当我:Gcom从 Neovim 终端运行时,它会在分支master所在的 repo 的情况下打印出来。还将在主分支所在的仓库中对此进行测试,但我认为这会做我想要的......mastermain

编辑:这确实有效!这是我的完整代码,供任何感兴趣的人使用。

function GitCheckoutMain()
  let mainGitBranch = system('git branch | grep -o -m1 "\b\(master\|main\)\b"')

  execute "normal! :Git checkout " . mainGitBranch
endfunction

...

command! Gcom :call GitCheckoutMain()

无论我在哪个分支上,如果我在:GcomNeovim 终端中输入内容,它都会将分支更改为master或在该特定存储库中设置的main任何主分支。呜呼!

我想感谢@dwelle 在此线程中发布的答案 -如何在 Git 中获取 master 分支的默认值?- 让我得到最终结果!

于 2021-11-19T16:37:11.890 回答