2013-05-28 2 views
11

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

Что я изменил рабочее дерево с помощью конфигурации:

worktree=/Users/myuser/project

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

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

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

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

+0

Попробуйте '--git-dir' или набор среды вар' GIT_DIR' см принял ответ http://stackoverflow.com/questions/5283262/what-is-a-git-work-tree-why-have-i-never-needed-to-set-this-as-an-env-var- почему – devconsole

+0

Я видел ответ, но я предполагаю, что если я переопределяю GIT_DIR, приведет к некоторым беспорядкам во время работы с несколькими репозиториями за короткий промежуток времени. Я нашел вариант конфигурации рабочей строки, но ничего не работает с рабочим каталогом ... Репозиторий также существует, и я не могу запустить 'git init -git-dir'. Как использовать -git-dir? любая документация? Может ли он быть установлен через config? – ValeriiVasin

+2

Обычно git ищет каталог .git в текущем рабочем каталоге. Если его нет, он выглядит в родительском каталоге и так далее, пока не достигнет корневого каталога. В вашей настройке он никогда не найдет .git, и поэтому он также не найдет .git/config. Поэтому вам нужно указать расположение каталога .git. Может быть, вы можете использовать разные псевдонимы для разных проектов? – devconsole

ответ

12

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

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 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.

3

Коррекция --git-dir использования флага:

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

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

вместо:

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