別のフォルダーでgit“ log”コマンドを使用する


127

フォルダーA(gitプロジェクト)にいくつかのphpファイルがあります。これらのphpファイルで「git log」を実行したいが、フォルダーBの場合。フォルダーBは別のgitプロジェクトです(ログはAとBで異なります)。

シェルコマンドでどうすればいいですか?


3
cd /other/dir && git log && cd -バッシュシェルで?
takeshin

1
git 1.8.5(2013年第4四半期)では、設定する代わりに別の選択肢があります--git-dir以下の私の回答を
VonC '21

回答:


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の/バーログ
rgngl

23
警告!このアプローチは、以外の操作では機能しませんlog。試してくださいgit --git-dir /foo/someclone/.git status-gitは完全に混乱します。-C下記の通りお勧めします。
エア

「--git-dir」という文字列を含むgitヘルプページをまだ見つけていません: '(
thinsoldier

1
@thinsoldier man gitは私のシステムで実行します(2.3.5)。しかし、@ VonCの答えははるかにうまく機能します。
Calimo 2015

144

gitの1.8.5(Q4 2013) 、あなたの代わりに設定に、別の選択肢を持つことになります--git-dir。フォルダーで
実行する場合は、次のように入力git logします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
エア

うわー、そしてmanページには何もありません!残念だ。(わかりました、2.7のmanページに追加されました)
akostadinov

悲しいことに、これは-R相対パスを混乱させるので、Mercurialのオプションほど優れていません。たとえば、タイプgit -C subdir log subdir/myfileするとエラーになります(ファイルを探すためsubdir/subdir/myfile)。
jwd 2017年

:あなたはこのような何かするとき--git-dirが手軽ですfor p in (find . -type d -name ".git"); do git --git-dir $p ...; done
shabunc

1
@jwd:それがどのように問題なのかわかりませんか?あなたが引用したのは、私が期待する正確な動作であり、gitそれが私や入力したものより賢いとは思わないでしょう。「これをディレクトリXで実行する」と言っても、「時を除いて、何か他のことをする」という意味ではありません。
underscore_d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.