3

环境

设置

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

git --git-dir=/home/kunzaatko/.cfg/ --work-tree=/home/kunzaatko/ __command__

代替

git __command__

用法

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

欲望

我想用我的 config git 裸存储库来做到这一点。

我尝试了什么:

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

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

:let b:git_dir=/home/kunzaatko/.cfg/
  1. 将工作目录更改为 git 目录,以便逃犯识别它是一个 git repo:
:chdir /home/kunzaatko/.cfg/

如果我知道怎么做,什么值得尝试:

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

问题

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

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

4

2 回答 2

4

我同意@okket,但是当我使用该方法时会出现问题。

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

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

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

对于fish shell的用户(比如我),应该使用env命令:

env GIT_DIR=$HOME/.cfg GIT_WORK_TREE=$HOME [n]vim
  1. core.worktree为您的 git 存储库设置:
git --git-dir=$HOME/.cfg --work-tree=$HOME config --local core.worktree $HOME

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

git --git-dir=$HOME/.cfg --work-tree=$HOME config --local core.worktree

输出应该是您的 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 --unset core.bare

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

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

于 2021-03-14T12:08:30.353 回答
2

环境变量$GIT_DIR$GIT_WORK_TREE让您在使用裸存储库时将 git 和 fugitive 指向 dotfile 目录。此解决方案需要注意的是,在设置这些变量时,逃犯/git 将忽略其他存储库。

要限制这种环境污染,请像这样启动 vim:

GIT_DIR=$HOME/.cfg GIT_WORK_TREE=$HOME vim [file(s)]

如果语法不熟悉:可以在大多数(所有?)shell 中调用二进制文件之前预先设置环境变量。这限制了通过环境变量将 git 重定向到这个特定的 vim 实例。

提高生活质量的方法是将此行放入 shell 别名或使用功能齐全的点文件管理器,如yadm,它是 git 裸存储库的包装器。

于 2021-02-10T16:34:04.793 回答