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.