2013-05-28 131 views
11

我想使用Git存储库,但工作树应该是远程的。例如:如果我将我的项目存储在内部存储的~/projectproject.git内部的~/git/project.gitGit更改工作目录

我已经通过配置改变工作树:

worktree=/Users/myuser/project

而且我能够提交和查看差异,但是当我试图做git stash,我得到了错误:

致命:/ usr/libexec/git-core/git-stash不能在没有工作树的情况下使用。

如何将.git目录远离工作树? 为什么我得到这个错误?

git config --get core.worktree返回正确的工作目录....

+0

尝试'--git-dir'或设置环境VAR'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它在短时间内使用少量库时会造成一些混乱。我找到了worktree配置选项,但没有关于工作目录...存储库也存在,我不能运行'git init --git-dir'。如何使用--git-dir?任何文件?它可以通过配置设置? – 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' 

编辑:请注意,您不必回购后指定--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绝对路径。

3

修正为--git-dir标志使用:

使用:的

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

代替:

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