Mac側で「git submodule init
」と「git submodule update
」を実行した場合、Linux側でも実行する必要があるのはなぜですか。
これらの2つのサブモジュールコマンドは、ローカルリポジトリ(クローンを作成したばかりのリポジトリ)用です。
git submodule init
ローカル構成ファイルを初期化し、
git submodule update
そのプロジェクトからすべてのデータをフェッチし、親リポジトリにリストされている適切なコミットをチェックアウトします。
1つのローカルリポジトリでこれを実行しても、他のクローンリポジトリ(Linuxのリポジトリ、Macのリポジトリから複製されたリポジトリなど)には副作用はありません。
すべてのデータを取得するには、2番目のローカルリポジトリ(Linuxサーバーに対してローカル)に対してこれらのコマンドを再度実行する必要があります。
注:を実行したのgit clone
ではなく、git clone --reference
単純なを実行したことを確認してください。
また、サブモジュールがフルパスで参照されていないことを確認してください(gitバージョンによって異なります):このスレッドを参照してください:
「最終更新」とは何ですか?v1.7.8では、サブモジュール用に個別のgit dirが導入され、絶対パスが使用されていました。
この絶対パスは、v1.7.10-rc1に存在するこのパッチセットの相対パスに変更されました。
最近から、名前の<name>
付いたサブモジュールのgitディレクトリはスーパープロジェクトの.git/modules/<name>
ディレクトリにあり、作業ツリーにはそこを指すgitfileが含まれています。
サブモジュールのgitディレクトリがcloneコマンドに見つからないためにクローンを作成する必要がある場合.git/modules/<name>
、絶対パスがgitfileに書き込まれます。クローンが必要ない場合、gitディレクトリはgit-submodule.sh
、相対パスをに書き込むことにより、スクリプトによって再アクティブ化されgitfile
ます。
動作は以前にに複製されたサブモジュールに依存するため、これは一貫性がありません.git/modules of the superproject
。
gitfileを無効にすることなくスーパープロジェクトを移動できるため、ここでは相対パスを使用することをお勧めします。
これを行うには、常に相対パスをに書き込みますgitfile
。これにより、cloneコマンドがそこに書き込んだ可能性のある絶対パスが上書きされます。