Starting git 1.8.5 (Q4 2013), you will be able to "use a Git command, but without having to change directories".
Just like "make -C <directory>
", "git -C <directory> ...
" tells Git to go there before doing anything else.
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
Since Git 2.3.4 (March 2015), and commit 6a536e2 by Karthik Nayak (KarthikNayak
), git
will treat "git -C '<path>'
" as a no-op when <path>
is empty.
'git -C ""
' unhelpfully dies with error "Cannot change to ''
", whereas the shell treats cd ""' as a no-op.
Taking the shell's behavior as a precedent, teach git
to treat -C ""' as a no-op, as well.
4 years later, Git 2.23 (Q3 2019) documents that 'git -C ""
' works and doesn't change directory
It's been behaving so since 6a536e2 (git
: treat "git -C '<path>'
"
as a no-op when <path>
is empty, 2015-03-06, Git v2.3.4).
That means the documentation now (finally) includes:
If '<path>
' is present but empty, e.g. -C ""
, then the current working directory is left unchanged.
You can see git -C
used with Git 2.26 (Q1 2020), as an example.
See commit b441717, commit 9291e63, commit 5236fce, commit 10812c2, commit 62d58cd, commit b87b02c, commit 9b92070, commit 3595d10, commit f511bc0, commit f6041ab, commit f46c243, commit 99c049b, commit 3738439, commit 7717242, commit b8afb90 (20 Dec 2019) by Denton Liu (Denton-L
).
(Merged by Junio C Hamano -- gitster
-- in commit 381e8e9, 05 Feb 2020)
t1507
: inline full_name()
Signed-off-by: Denton Liu
Before, we were running test_must_fail full_name
. However, test_must_fail
should only be used on git commands.
Inline full_name()
so that we can use test_must_fail
on the git
command directly.
When full_name()
was introduced in 28fb84382b ("Introduce <branch>@{upstream}
notation", 2009-09-10, Git v1.7.0-rc0 -- merge), the git -C
option wasn't available yet (since it was introduced in 44e1e4d67d ("git
: run in a directory given with -C option", 2013-09-09, Git v1.8.5-rc0 -- merge listed in batch #5)).
As a result, the helper function removed the need to manually cd
each time. However, since git -C
is available now, we can just use that instead and inline full_name()
.