Search code examples
git

Git change working directory


I want to work with Git repository, but working tree should be remote. For example: if I have my project stored inside of ~/project and project.git stored inside of ~/git/project.git.

What I've changed working tree via config:

worktree=/Users/myuser/project

And I'm able to commit and view diff, but when I've tried to do git stash, I got error:

fatal: /usr/libexec/git-core/git-stash cannot be used without a working tree.

How to store .git directory far from working tree? And why I'm getting this error?

git config --get core.worktree returns correct working directory....


Solution

  • The following seems to work, adjust to your needs:

    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: Notice that you don't have to specify --work-tree after the repo has been initialized since that value is stored in git/test/config.

    You can also cd into work/test and commit from there:

    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'
    

    Then use an absolute path for --git-dir or set GIT_DIR.