如何将 vim-fugitive 与 git 裸存储库一起使用?

kun*_*tko 4 vim git-bare vim-fugitive

环境

设置

我使用git bare存储库来版本化我的配置文件。我可以使用与使用普通git存储库相同的命令,只需包含一些标志

git --git-dir=/home/kunzaatko/.cfg/ --work-tree=/home/kunzaatko/ __command__
Run Code Online (Sandbox Code Playgroud)

代替

git __command__
Run Code Online (Sandbox Code Playgroud)

用法

我将vim-fugitive与普通git存储库结合使用,主要是为了进行重大更改,并通过部分暂存(仅一组离散的块/更改)并单独提交它们来将其添加到许多不同的提交中。我用:Gdiff它来获得我可以使用的漂亮且高效的界面。

欲望

我想用我的配置 git bare 存储库来做到这一点。

我尝试过的:

  1. 将存储库重命名为.cfg.git. 这并没有带来任何改变。表明这应该有效的问题

  2. 我尝试更改git-fugitiveb:git_dir的内部变量:

:let b:git_dir=/home/kunzaatko/.cfg/
Run Code Online (Sandbox Code Playgroud)
  1. 将工作目录更改为 git 目录,以便 fugitive 识别出它是 git 存储库:
:chdir /home/kunzaatko/.cfg/
Run Code Online (Sandbox Code Playgroud)

如果我知道如何做的话,什么是值得尝试的:

  1. 我认为可能有一种方法可以使用该git submodule命令将裸存储库放入范围内。问题在于将git 存储库放在哪里......我基于这种可能性的问题

问题

有没有办法将git bare存储库与git-fugitive一起使用?

(或任何其他可以解决我的用例的建议)

gkz*_*zhb 8

我同意@okket,但是当我使用该方法时存在问题。

在 Gstatus 窗口中,我无法获取已更改文件的状态。我发现原因是逃犯core.worktreeGIT_DIR存储库中获取了属性。

所以对我来说,可行的方法如下:

  1. 正如@okket所说,GIT_DIR使用 vim/nvim 命令时设置 env 变量(GIT_WORK_TREE可以省略):
GIT_DIR=$HOME/.cfg GIT_WORK_TREE=$HOME [n]vim
Run Code Online (Sandbox Code Playgroud)

对于fish shell的用户(像我一样),应该使用env命令:

env GIT_DIR=$HOME/.cfg GIT_WORK_TREE=$HOME [n]vim
Run Code Online (Sandbox Code Playgroud)
  1. core.worktree为您的 git 存储库设置:
env GIT_DIR=$HOME/.cfg GIT_WORK_TREE=$HOME [n]vim
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令确保正确:

git --git-dir=$HOME/.cfg --work-tree=$HOME config --local core.worktree $HOME
Run Code Online (Sandbox Code Playgroud)

输出应该是您的 HOME 路径。

  1. 如果您通过以下方式获取 git 存储库git clone --bare ...,则需要取消设置core.bare以避免 git status 错误warning: core.bare and core.worktree do not make sense
git --git-dir=$HOME/.cfg --work-tree=$HOME config --local core.worktree
Run Code Online (Sandbox Code Playgroud)

对于这个方法还有一件事需要注意。$HOME您不能在会出现错误的目录之外使用逃犯fugitive: working directory does not belong to a Git repository

PS:我想对@okket的答案发表评论,但由于声誉较低,我只能在这里发布新答案。