Use -C
as the first argument to git:
git -C /home/repo log
Per the docs, the effect of this is:
-C <path>
Run as if git was started in
<path>
instead of the current working directory. …
This is almost equivalent to --git-dir
and --work-tree
without appending the usual .git
folder. However, the options --git-dir
and --work-tree
do not exist to access the repository from outside the work tree; they are used to move the .git
somewhere else, and they are much more complicated to use in some cases.
For instance, to get the log of /home/repo/subdir
only:
git -C /home/repo/subdir log .
or
git -C /home/repo log subdir
It is not possible to use log .
with --git-dir
or --work-tree
. The path must be processed to extract the subpath relative to the top of the work tree, and even in that case, git will not recognize it as a path if you do not use the --
option, so the only possible way is:
git --git-dir /home/repo/.git log -- subdir
Furthermore, --work-tree
does not work at all with the log
subcommand with my version (git 1.9.1). It is just ignored:
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
I do not even understand if this is a bug or a feature… as usual with many git design choices.