フォルダーには、かなり長い間複製した多数のプロジェクトがあります。最近、このフォルダー全体をリポジトリの 1 つに移動し、これらの複製されたプロジェクトをサブモジュールに変換して、将来の更新と制御を改善したいと考えています。これを行う方法について多くのことをグーグルで調べましたが、すべてのチュートリアルでは、サブモジュールを新たに追加する方法についてのみ説明しています。誰でも私を助けることができますか?
3 に答える
既存の git リポジトリをサブモジュールとして追加することは、新しいものを追加することと同じです。
- 最初に、すべての git リポジトリを含むフォルダーを、それ自体を git リポジトリとして作成します
git init
。 - を使用
git submodule add https//example.com/remoterepo ./localrepo
し./localrepo
ます。 は既存の git リポジトリです。- 注:
remoterepo
からの URL を取得しますlocalrepo/.git/config
。
- 注:
- サブモジュールとして追加するすべての既存のリポジトリに対して、2 番目の手順を繰り返します。
- これで、実行
git submodule foreach git pull
してすべてのサブプロジェクトを更新できます。
サブモジュールがたくさんある場合は、2 番目のステップを自動化する小さなスクリプトを作成することをお勧めしますが、これは難しくありません。
編集
以下は、コメントに記載されているエラーを再現するために使用したものです。コマンドをトリプルチェックしましたが、まだエラーが表示されません:
git --version
mkdir submoduletest
cd submoduletest
git init --bare remote_repo_A
git init --bare remote_repo_B
git clone remote_repo_A local_repo_A
git clone remote_repo_B local_repo_B
cd local_repo_A
echo "test commit on repo B" >> test.txt
git add test.txt
git commit -m 'test commit message'
git push origin master
cd ../local_repo_B
echo "test commit on repo B" >> test.txt
git add test.txt
git commit -m 'test commit message'
git push origin master
cd ../local_repo_A
git clone ../remote_repo_B local_repo_B
git submodule add ../remote_repo_B ./local_repo_B
git submodule foreach git pull origin master
git add .
git ci -m 'we just added a submodule for remote_repo_B'
git submodule status
次のコマンドを使用して の現在のステータスを確認しlocal_repo_A
ます。1 つは 'test.txt' 用で、もう 1 つは暗黙的に作成された '.gitmodules' ファイル用の 2 つの BLOB オブジェクトしかありません。 のインデックスには何remote_repo_B
も追加されません。local_repo_A
find .git/objects -type f | awk -F/ '{print $3$4}' | xargs -I {} git cat-file -t {} | grep blob
編集をロールバックした理由は、編集が単に間違っているためです。他の 2 人のメディエーターと私によって既に拒否されましたが、後で他の人が承認しました。SO のバグなのか何なのかわかりません。しかし、編集は完全に間違っているため、今でも拒否されています。コメントで理由を説明しました。私は誰にも不快感を与えませんが、これは私の時間を無駄にしました。答えが役に立たない場合は反対票を投じてください。
繰り返しますが、改善しない場合は、私の回答を編集しないでください。