Gitサブモジュールを別のgitリポジトリに置き換えるにはどうすればよいですか?
具体的には、サブモジュールがあります:
./ExternalFrameworks/TestFramework
にあり、gitリポジトリを指します[email protected]:userA/TestFramework.git
[email protected]:userB/TestFramework.git
を指すようになりたいです。問題は、 here で説明した方法でサブモジュールを削除すると、コマンドを使用してサブモジュールを再度追加することです
git submodule add [email protected]:userB/TestFramework.git
私はこのエラーを受け取ります:
A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
Origin [email protected]:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
[email protected]:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
サブモジュールの場所(URL)が変更された場合、次のことができます。
.gitmodule
ファイルを変更しますrm -rf .git/modules/<submodule>
のサブモジュールフォルダーを削除します。rm -rf <submodule>
のサブモジュールフォルダーを削除しますgit submodule sync
を実行しますgit submodule update
を実行しますより完全な情報は他の場所で見つけることができます:
まず、既に述べたメソッドで現在のサブモジュールを削除します here 、これは便宜上のものです:
.gitmodules
ファイルから関連セクションを削除します.git/config
から関連セクションを削除しますgit rm --cached path_to_submodule
(末尾のスラッシュなし)を実行します次に、--name
フラグを使用して新しいサブモジュールを追加します。これにより、サブモジュールの.git/config
で参照する代替名がgitに与えられ、過去に存在していたサブモジュールとの競合を解消します。
タイプ:
git submodule add --name UpdatedTestFramework [email protected]:userB/TestFramework.git
そして、期待したパスにサブモジュールをロードします。
これらのコマンドは、ローカルリポジトリ上のファイルを変更せずにコマンドプロンプトで作業を行います。
git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Dev
git submodule sync
git submodule update --init --recursive --remote
これを修正したのは、サブモジュールではなくgitリポジトリのルートにあり、
rm -rf .git/modules/yourmodule
その後、通常どおり追加できるはずです。
私が見つけた最も簡単な方法はこれです:
git rm -rf [submodule_dir]
git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]
私は.gitmodules
手動で。私は 小さなブログ投稿 についても書きました。
リモートURLをこのクローンのみに変更する場合:
git config submodule."$submodule_name".url "$new_url"
これは、親プロジェクトの.gitmodules
ファイルに影響を与えないため、他の開発者に伝播されません。
これは、「ユーザー固有のレコードの変更」 here と記述されています。
しないでくださいgit submodule sync
を実行すると、デフォルトのURLにリセットされます。