Как использовать vim-fugitive с голым репозиторием git?

Окружающая среда

Настраивать

Я использую репозиторий git bare для управления версиями моих файлов config. Я могу использовать те же команды, как если бы я использовал обычный репозиторий git, просто нужно включить некоторые флаги:

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

вместо

git __command__

Применение

Я использую vim-fugitive с обычными репозиториями git в основном для внесения больших изменений и добавления их во множество различных коммитов путем частичной подготовки (только дискретный набор фрагментов/изменений). ) и совершение их отдельно. Я использую для этого :Gdiff из-за приятного и продуктивного интерфейса, который я могу использовать.

Желание

Я хочу сделать это с моим репозиторием git bare.

Что я пробовал:

  1. Переименование репозитория в .cfg.git. Это не внесло никаких изменений. ошибка, предполагающая, что это должно работать

  2. Я попытался изменить внутреннюю переменную b:git_dir в git-fugitive:

:let b:git_dir=/home/kunzaatko/.cfg/
  1. Изменение рабочего каталога на каталог git, чтобы беглец узнал, что это репозиторий git:
:chdir /home/kunzaatko/.cfg/

Что стоило бы попробовать, если бы я знал как:

  1. Я думаю, что может быть способ использовать команду git submodule, чтобы поместить голое репо в область видимости. Проблема в том, куда поместить корень репозитория git... проблема, на которой я основываю эту возможность

Вопрос

Есть ли способ использовать репозиторий git bare с git-fugitive?

(или любое другое предложение, которое решит мой вариант использования)


person kunzaatko    schedule 26.11.2020    source источник


Ответы (2)


Я согласен с @okket, но при использовании этого метода возникает проблема.

В окне Gstatus я не могу получить статус измененных файлов. И я нахожу причина в том, что беглец получает атрибут core.worktree из репозитория GIT_DIR .

Итак, для меня жизнеспособный способ сделать это выглядит следующим образом:

  1. Как говорит @okket, установите переменную env 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

Выход должен быть вашим ДОМАШНИМ путем.

  1. Если вы получите репозиторий git до git clone --bare ..., вам нужно отключить core.bare, чтобы избежать ошибки статуса git warning: core.bare and core.worktree do not make sense:
git --git-dir=$HOME/.cfg --work-tree=$HOME config --unset core.bare

И еще одно замечание по этому методу. Вы не можете использовать fugitive вне каталога $HOME, где вы получите ошибку fugitive: working directory does not belong to a Git repository.

PS: я хотел бы прокомментировать ответ @okket, но из-за низкой репутации я могу опубликовать здесь только новый ответ.

person gkzhb    schedule 14.03.2021

Переменные среды $GIT_DIR и $GIT_WORK_TREE позволяют указать git и fugitive каталог dotfile при использовании пустого репозитория. Это решение работает с оговоркой, что fugitive/git будет игнорировать другие репозитории, пока установлены эти переменные.

Чтобы ограничить это загрязнение окружающей среды, запустите vim следующим образом:

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

В случае, если синтаксис незнаком: в большинстве (во всех?) оболочках можно добавить переменные среды перед вызовом двоичного файла. Это ограничивает перенаправление git через переменные среды на этот конкретный экземпляр vim.

Улучшение качества жизни может состоять в том, чтобы поместить эту строку в псевдоним оболочки или использовать полнофункциональный диспетчер файлов точек, такой как yadm, который представляет собой оболочку для голого репозитория git.

person okket    schedule 10.02.2021