--git-dir=<path> Set the path to the repository (". git" directory). This can also be controlled by setting the GIT_DIR environment variable. It can be an absolute path or relative path to current working directory.
The git init command creates a new Git repository. It can be used to convert an existing, unversioned project to a Git repository or initialize a new, empty repository. Most other Git commands are not available outside of an initialized repository, so this is usually the first command you'll run in a new project.
You have to define the working dir as well. Confusing I know but it's a flexibility thing.
git --git-dir=/mycode/.git --work-tree=/mycode status
You can read a little more here
Starting git 1.8.5 (which should be out next week), it will be even simpler:
git -C "/home/domain/" status
No need to set --git-dir
and --work-tree
anymore!
However, as noted by OmarL in the comments:
I have found that
-C
is not quite equivalent to--git-dir --work-tree
, because-C
does not override theGIT_DIR
environment variable.
See commit 44e1e4 by Nazri Ramliy:
It takes more keypresses to invoke git command in a different directory without leaving the current directory:
(cd ~/foo && git status) git --git-dir=~/foo/.git --work-tree=~/foo status GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
(cd ../..; git grep foo)
for d in d1 d2 d3; do (cd $d && git svn rebase); done
The methods shown above are acceptable for scripting but are too cumbersome for quick command line invocations.
With this new option, the above can be done with fewer keystrokes:
git -C ~/foo status
git -C ../.. grep foo
for d in d1 d2 d3; do git -C $d svn rebase; done
Based on your comment above, it sounds like you are still running into a problem:
root@erx [/]# git --git-dir=/home/domain/.git --work-tree=/home/domain/ pull origin master fatal: /usr/local/libexec/git-core/git-pull cannot be used without a working tree
It sounds like you might be intending to run this from crontab
or something. You may be better off using cd
to switch to your working directory first. For example:
root@erx [/]# (cd /home/domain && git pull origin master)
This will temporarily (in a subshell, which is what the parentheses do) change the current directory to /home/domain
, and then run git pull origin master
. After the command is complete, your current directory remains whatever it was before the command.
git --git-dir="/home/domain/" status
## Error
fatal: Not a git repository: '/home/domain/'
With Git 2.26 (Q1 2020), the documentation is clearer.
One effect of specifying where the GIT_DIR
is (either with the environment variable, or with the "git --git-dir=<where> cmd
" option) is to disable the repository discovery.
This has been placed a bit more stress in the documentation, as new users often get confused.
See commit d82ad54 (30 Jan 2020) by Heba Waly (HebaWaly
).
(Merged by Junio C Hamano -- gitster
-- in commit 17e4a1b, 12 Feb 2020)
git
: update documentation for --git-dirSigned-off-by: Heba Waly
Helped-by: Junio C Hamano
git --git-dir <path>
is a bit confusing and sometimes doesn't work as the user would expect it to.For example, if the user runs
git --git-dir=<path> status
, git will skip the repository discovery algorithm and will assign the work tree to the user's current work directory unless otherwise specified.
When this assignment is wrong, the output will not match the user's expectations.This patch updates the documentation to make it clearer.
So the documentation for git --git-dir
now includes:
--git-dir=<path>:
Set the path to the repository ("
.git
" directory).
This can also be controlled by setting theGIT_DIR
environment variable.
It can be an absolute path or relative path to current working directory.Specifying the location of the "
.git
" directory using this option (orGIT_DIR
environment variable) turns off the repository discovery that tries to find a directory with ".git
" subdirectory (which is how the repository and the top-level of the working tree are discovered), and tells Git that you are at the top level of the working tree.If you are not at the top-level directory of the working tree, you should tell Git where the top-level of the working tree is, with the
--work-tree=<path>
option (orGIT_WORK_TREE
environment variable)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With