Aurélien B
Aurélien B

Reputation: 4640

Use git "log" from another folder

I am in directory A. How do I execute git log for the git repository in directory B?

Upvotes: 200

Views: 65738

Answers (3)

Mateen Ulhaq
Mateen Ulhaq

Reputation: 27201

All possible options:

Usually, -C is what most people want. For other uses, consider combining the above.

Upvotes: 7

rgngl
rgngl

Reputation: 5423

From, man git:

You can do this with the --git-dir parameter, before passing any commands.

git --git-dir /foo/bar/.git log

(Specifying the .git directory is necessary.) From the documentation:

--git-dir=<path>

Set the path to the repository. 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.

Upvotes: 256

VonC
VonC

Reputation: 1324043

With git 1.8.5 (Q4 2013), you will have another choice, instead of setting --git-dir.
If you want to execute git log in folder B, type:

git -C B log

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:

  1. (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-tree=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2. (cd ../..; git grep foo)
  3. 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:

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done

Upvotes: 226

Related Questions