Git изменить рабочий каталог

Я хочу работать с репозиторией Git, но рабочее дерево должно быть удаленным. Например: если мой проект хранится внутри ~/project и project.git, хранящихся внутри ~/git/project.git.

Что я изменил дерево работы через config:

worktree=/Users/myuser/project

И я могу зафиксировать и просмотреть diff, но когда я попытался сделать git stash, я получил ошибку:

fatal:/usr/libexec/ git -core/git -stash нельзя использовать без рабочего дерева.

Как сохранить каталог .git далеко от рабочего дерева? И почему я получаю эту ошибку?

git config --get core.worktree возвращает правильный рабочий каталог....

Ответ 1

Следующее, похоже, работает, приспосабливаясь к вашим потребностям:

mkdir git
mkdir work
git --git-dir git/test --work-tree work/test init
mkdir work/test
echo -n foo > work/test/foo.txt
git --git-dir git/test status
git --git-dir git/test add foo.txt
git --git-dir git/test commit -m 'commit 1'

EDIT: обратите внимание, что вам не нужно указывать --work-tree после инициализации репо, поскольку это значение сохраняется в git/test/config.

Вы также можете записать cd в работу/проверить и зафиксировать:

cd work/test
echo -n bar > bar.txt
git --git-dir ../../git/test status
git --git-dir ../../git/test add .
git --git-dir ../../git/test commit -m 'commit 2'

Затем используйте абсолютный путь для --git-dir или установите GIT_DIR.

Ответ 2

Исправление для использования флага --git-dir:

использование:

git --git-dir=git/test/.git ...

вместо:

git --git-dir git/test ...