1. ホーム
  2. git

[解決済み] git ディレクトリにいないときに git pull する

2022-03-17 11:51:36

質問

例えば、あるディレクトリがあるとします。 /X/Y は、git リポジトリです。のようなコマンドをどうにかして呼び出すことは可能でしょうか? git pull の内部から /X をターゲットにしていますが /X/Y ディレクトリを作成しますか?

EDITです。 具体的には、ディレクトリを変更することなく、gitコマンドを使用してこれを行うことは可能でしょうか?

注意 を受け入れました。 VonCの回答 というのは、以前の選択肢よりもずっとエレガントだからです。1.8.5 より古いバージョンの Git をお使いの方は bstpierreの回答は以下の通りです。 .

解決方法は?

開始 git 1.8.5 (2013年第4四半期) を使えば、ディレクトリを変更することなく、Gitコマンドを使用することができます。

<ブロッククオート

ちょうど"のようなものです。 make -C <directory> "です。 " git -C <directory> ... " は、Git にそこに行ってから何かするように指示します。 .

参照 コミット 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

Git 2.3.4(2015年3月)以降、および コミット 6a536e2 によって Karthik Nayak ( KarthikNayak ) , git は " を扱います。 git -C '<path>' "として の場合、ノーオープンです。 <path> が空である場合。

' git -C "" ' は、役に立たないことに、エラー " で死んでしまいます。 Cannot change to '' シェルは cd ""' を no-op として扱うのに対し、" は no-op です。
シェルの挙動を前例として git をノー・ポップとして扱うようにします。


4年後のGit 2.23 (2019年第3四半期)のドキュメントでは、' git -C "" が動作し、ディレクトリが変更されない

6a536e2以降、そのような挙動をするようになりました( git : トリート "です。 git -C '<path>' " をノーオープンとして <path> が空であること、2015-03-06、Git v2.3.4)。

それはつまり ドキュメント が含まれるようになりました(ようやく)。

もし、' <path> は存在するが空である、例えば -C "" の場合、現在の作業ディレクトリは変更されない。


を見ることができます。 git -C は、例としてGit 2.26 (Q1 2020)で使用されています。

参照 コミット b441717 , コミット 9291e63 , コミット 5236fce , コミット10812c2 , コミット 62d58cd , コミットb87b02c , コミット 9b92070 , コミット 3595d10 , コミット f511bc0 , コミット f6041ab , コミット f46c243 , コミット 99c049b , コミット 3738439 , コミット 7717242 , コミットb8afb90 (2019年12月20日)による デントン リュウ ( Denton-L ) .
(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミット 381e8e9 2020年02月05日)

<ブロッククオート

t1507 : インライン full_name()

署名: Denton Liu

以前は test_must_fail full_name . しかし test_must_fail は、gitコマンドにのみ使用する必要があります。
インライン full_name() を使用できるようにします。 test_must_fail の上に git コマンドを直接実行します。

いつ full_name() に導入されました。 28fb84382b ("Introduce <branch>@{upstream} 記法", 2009-09-10, Git v1.7.0-rc0 --。 マージ ) を使用すると git -C オプションはまだ利用できませんでした (このオプションが導入されたのは 44e1e4d67d (" git : -C オプションで指定したディレクトリで実行する", 2013-09-09, Git v1.8.5-rc0 --。 マージ に掲載されています。 バッチ5号 )).
その結果、このヘルパー関数を使用することで、手動で cd を毎回実行します。しかし git -C が利用できるようになったので、代わりにそれを使ってインライン化すればいいのです。 full_name() .