サブモジュールを含むリポジトリの移動には問題があります
もともと古いOSのApp_V3フォルダにGitをセットアップしていたのではないかと考えています
これが問題の原因です。
重要なのは、リポジトリ (より具体的には、参照されるサブモジュール) が最初に作成されたときの git のバージョンです。
サブモジュールをvendor/awesome
作成するときの git の動作はまったく異なります。
git バージョン < 1.7.8
の内容はvendor/awesome/.git
フォルダーです。他の git チェックアウトと同様に、たとえばチェックアウトのフォルダー構造は次のようになります。
.gitmodules
.git
...
vendor/
awesome
.git
config
HEAD
index
packed-refs
...
どこにもパスが保存されていないため、この種のリポジトリを移動しても問題ありません。
git バージョン 1.7.8 または 1.7.9
1.7.8 は、サブモジュールの .git フォルダーの場所を移動しました
「git submodule init」を使用して新しいサブモジュール ディレクトリを設定すると、サブモジュールの $GIT_DIR メタ情報ディレクトリがスーパープロジェクトの $GIT_DIR/modules// ディレクトリ内に作成され、gitfile メカニズムを介して参照されます。これは、サブモジュールをツリーに持つスーパープロジェクトと持たないスーパープロジェクトのコミットを、再クローンせずに切り替えることができるようにするためです。
したがってvendor/awesome/.git
、フォルダではなく、次の内容のファイルです。
gitdir: /absolute/path/to/main/repo/.git/modules/vendor/awesome
全体的なフォルダー構造は次のとおりです。
.gitmodules
.git
...
modules
vendor
awesome
config
HEAD
index
packed-refs
...
vendor/
awesome
.git <- a file
の内容は.git/modules/vendor/awesome/config
、作業ツリーの場所を指定します。
[core]
...
worktree = /absolute/path/to/main/repo/vendor/awesome
これは非常に素晴らしい変更でしたが、場所の参照に絶対パスが使用されていたため、問題が発生しました。
git バージョン >= 1.7.10
バージョン 1.7.10では、サブモジュールでの絶対パスの使用が変更されました
「git submodule」によって管理される最上位のスーパープロジェクトを格納するディレクトリ全体を別の場所に移動できます。
vendor/awesome/.git
このバージョンまたはそれ以降のバージョンの git で生成された場合、以下が含まれます。
gitdir: ../../.git/modules/vendor/awesome
の内容は.git/modules/vendor/awesome/config
、作業ツリーの場所を指定します。
[core]
...
worktree = ../../../../vendor/awesome
繰り返しになりますが、メイン リポジトリからの相対パスとして、この種のリポジトリを移動しても問題はありません。
リポジトリの移動
古いバージョンまたは新しいバージョンの git を使用しても問題ありません。
残念ながら、1.7.8 または 1.7.9 で作成されたリポジトリで作業し (問題の証拠からそう思われる) 、リポジトリを移動する場合は、2 つの解決策があります。
- 再度クローン
- サブモジュールの .git ファイルの正しいパスと、対応するワークツリー構成設定