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

Alp*_*haB 113 git

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

我怎么能用shell命令做到这一点?

rgn*_*ngl 169

来自man git:

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

git --git-dir /foo/bar/.git log
Run Code Online (Sandbox Code Playgroud)

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

--git-dir=<path>

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

  • 你必须引用`.git`目录.试试`git --git-dir =/foo/bar/.git log`. (24认同)
  • 警告!对于除`log`之外的操作,这种方法被破坏了.试试`git --git-dir /foo/someclone/.git status` - git完全搞糊涂了.我推荐`-C`,如下所示. (23认同)
  • 对不起,我错了你不要把 - 在--git-dir和目录名之间.所以它变成了git --git-dir/foo/bar log (6认同)

Von*_*onC 129

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

git -C B log
Run Code Online (Sandbox Code Playgroud)

就像" make -C <directory>"," git -C <directory> ..."告诉Git在做任何其他事情之前去那里.


Nazri Ramliy提交44e1e4:

在不离开当前目录的情况下,需要更多的按键才能在不同的目录中调用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

  • 这是一种更可靠的方法,适用于除`log`之外的命令. (16认同)
  • 这应该是公认的答案,谢谢. (2认同)

Mat*_*haq 7

所有可能的选项:

通常,-C这是大多数人想要的。对于其他用途,请考虑将上述内容结合起来。