web-dev-qa-db-ja.com

gitサブモジュールを別のリポジトリに置き換えるにはどうすればよいですか?

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.
86
joseph.hainline

サブモジュールの場所(URL)が変更された場合、次のことができます。

  1. 新しいURLを使用するように.gitmoduleファイルを変更します
  2. リポジトリrm -rf .git/modules/<submodule>のサブモジュールフォルダーを削除します。
  3. 作業ディレクトリrm -rf <submodule>のサブモジュールフォルダーを削除します
  4. git submodule syncを実行します
  5. git submodule updateを実行します

より完全な情報は他の場所で見つけることができます:

109
Tim Henigan

まず、既に述べたメソッドで現在のサブモジュールを削除します here 、これは便宜上のものです:

  • .gitmodulesファイルから関連セクションを削除します
  • .git/configから関連セクションを削除します
  • git rm --cached path_to_submodule(末尾のスラッシュなし)を実行します
  • 現在追跡されていないサブモジュールファイルをコミットして削除する

次に、--nameフラグを使用して新しいサブモジュールを追加します。これにより、サブモジュールの.git/configで参照する代替名がgitに与えられ、過去に存在していたサブモジュールとの競合を解消します。

タイプ:

git submodule add --name UpdatedTestFramework [email protected]:userB/TestFramework.git

そして、期待したパスにサブモジュールをロードします。

32
joseph.hainline

これらのコマンドは、ローカルリポジトリ上のファイルを変更せずにコマンドプロンプトで作業を行います。

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
6

これを修正したのは、サブモジュールではなくgitリポジトリのルートにあり、

rm -rf .git/modules/yourmodule

その後、通常どおり追加できるはずです。

5
hobberwickey

私が見つけた最も簡単な方法はこれです:

git rm -rf [submodule_dir]
git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]

私は.gitmodules手動で。私は 小さなブログ投稿 についても書きました。

2
DerZyklop

リモートURLをこのクローンのみに変更する場合:

git config submodule."$submodule_name".url "$new_url"

これは、親プロジェクトの.gitmodulesファイルに影響を与えないため、他の開発者に伝播されません。

これは、「ユーザー固有のレコードの変更」 here と記述されています。

しないでくださいgit submodule syncを実行すると、デフォルトのURLにリセットされます。

1
joeytwiddle