在另一个文件夹中使用git“ log”命令


127

我在文件夹A(这是一个git项目)中有一些php文件。在这些php文件中,我要执行“ git log”,但对于文件夹B。文件夹B是另一个git项目(因此A和B之间的日志不同)。

我该如何使用shell命令呢?


3
cd /other/dir && git log && cd -在bash外壳中?
takehin 2010年

1
使用git 1.8.5(2013年第四季度)时,您将有另一种选择,而不是设置--git-dir:请参见下面的答案
VonC

Answers:


188

来自,man git

您可以--git-dir在传递任何命令之前使用参数来执行此操作。

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

(必须指定.git目录。)从文档中

--git-dir=<path>

设置存储库的路径。也可以通过设置GIT_DIR环境变量来控制。它可以是当前工作目录的绝对路径或相对路径。


26
您必须参考.git目录。尝试git --git-dir=/foo/bar/.git log
mipadi

6
抱歉,我的错是您不要在--git-dir和目录名之间放置=。因此它变成了git --git-dir / foo / bar log
rgngl 2010年

23
警告!对于除以外的其他操作,此方法不可用log。试试git --git-dir /foo/someclone/.git status-git完全感到困惑。我建议-C如下所述。
航空

我尚未遇到包含字符串“ --git-dir”的git帮助页面:'(
Thinsoldier 2015年

1
@thinsoldier man git在我的系统上执行(2.3.5)。但是@VonC答案效果更好。
Calimo

144

使用git 1.8.5(2013年第四季度)时,您将有另一种选择,而不是设置--git-dir
如果要git log在folder中执行B,请键入:

git -C B log

就像“ make -C <directory>”一样,git -C <directory> ...”告诉Git在做其他事情之前要去那里


提交44e1e4纳兹里Ramliy

在不离开当前目录的情况下,需要更多的按键才能在不同目录中调用git命令:

  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

上面显示的方法可用于脚本编写,但对于快速命令行调用而言则过于繁琐。

使用此新选项,可以用更少的击键完成上述操作:

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

19
这是一种更加可靠的方法,适用于除log
航空

哇,手册页中什么都没有!多可惜。(好的,现在我看到它在2.7手册页中添加了)
akostadinov'2

可悲的是,这仍然不如Mercurial的-R选项好,因为它弄乱了相对路径。例如,如果我键入git -C subdir log subdir/myfile它会给出错误(因为它正在查找文件subdir/subdir/myfile)。
jwd

--git-dir在执行以下操作时更方便:for p in (find . -type d -name ".git"); do git --git-dir $p ...; done
shabunc

1
@jwd:我不确定这是什么问题?您引用的是我期望的确切行为,我不想git认为它比我和我键入的内容更聪明。如果我说“在目录X中运行此文件”,则不是指“除了某些时候,请执行其他操作”。
underscore_d
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.