1. ホーム
  2. git

[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?

2022-02-05 02:03:20

質問

Windowsにgitをインストールしたところです。GIT_DIR 変数を c:\git に設定し、この環境変数が cygwin によって維持されていることを確認しました (すなわち echo $GIT_DIR があるべき姿であること)。 gitリポジトリを作成したいフォルダ、仮にc:⇄wwwに移動して実行しました。

git init
git add .

すると、エラーが出ます。

fatal: This operation must be run in a work tree

何がいけなかったのかわかりませんが、c: \git ディレクトリには、config ファイルがあります。

[core]
    repositoryformatversion = 0
    filemode = false
    bare = true
    symlinks = false
    ignorecase = true

これがむき出しになってはいけないのは間違いなく、我々の問題だ。

解決方法は?

エラーの直接の原因は、そうです。 git-add をベアリポジトリで使用することができます。ベアリポジトリは、定義上、作業ツリーを持ちません。 git-add は、作業ツリーからファイルを取得し、インデックスに追加してコミットの準備をします。

ただし、ここでの設定には少し工夫が必要かもしれません。GIT_DIR は、すべての git コマンドで使用するリポジトリディレクトリです。あなたは本当に、追跡するすべてのもの、もしかしたらあなたのシステム上のすべてのもののために単一のリポジトリを作ろうとしているのでしょうか?git リポジトリは、本来はひとつのディレクトリの内容を追跡するものです。そのため GIT_WORK_TREE を追跡したいものをすべて含むパスに設定し、さらに .gitignore を使用して、トラッキングに興味のないものをすべてブロックします。

例えば、以下のような場合です。 c:\www ? では、それを c:\www (GIT_DIRを設定しない)。これはgitの通常の使い方で、リポジトリはあなたの"module"のトップレベルディレクトリの.gitディレクトリに置かれます。

よっぽどの理由がない限りは、gitが好むやり方でいくことをお勧めします。もし追跡したいものがいくつもあるのなら、おそらく複数のリポジトリが必要でしょう。