リポジトリが作業ツリーの場所を認識していることを確認する必要があるだけで、その逆も同様です。
リポジトリーに作業ツリーの場所を知らせるには、構成値を設定しますcore.worktree
。ワークツリーにgitディレクトリの場所を知らせるには、.gitという名前のファイル(フォルダーではありません!)を追加し、次のような行を追加します。
gitdir: /path/to/repo.git
git 1.7.5以降、initコマンドはこのための追加オプションを学習しました。
新しい個別のリポジトリを初期化することができます
git init --separate-git-dir /path/to/repo.git
これにより、別のディレクトリにあるgitリポジトリが初期化され、現在のディレクトリ(新しいリポジトリの作業ディレクトリ)に.gitファイルが追加されます。
以前の1.7.5では、わずかに異なるパラメーターを使用し、.gitファイルを自分で追加する必要がありました。
別のリポジトリを初期化するには、次のコマンドでワークツリーをリポジトリにリンクします。
git --git-dir=/path/to/repo.git --work-tree=. init && echo "gitdir: /path/to/repo.git" > .git
現在のディレクトリが作業ツリーになり、gitはのリポジトリを使用します/path/to/repo.git
。initコマンドはcore.worktree
、--git-dir
パラメーターで指定された値を自動的に設定します。
これにエイリアスを追加することもできます:
[alias]
initexternal = !"f() { git --work-tree=. --git-dir=\"$1\" init && echo \"gitdir: $1\" >> .git; }; f"
読み取り専用の作業ディレクトリでgitバージョン管理を使用する
上記の知識があれば、書き込み権限がなくても作業ディレクトリのgitバージョン管理を設定できます。--git-dir
すべてのgitコマンドで使用するか、リポジトリ内から(作業ディレクトリではなく)すべてのコマンドを実行する場合は、.gitファイルを省略できるため、作業ディレクトリ内にファイルを作成する必要はありません。レオの回答も参照