14

フォルダーには、かなり長い間複製した多数のプロジェクトがあります。最近、このフォルダー全体をリポジトリの 1 つに移動し、これらの複製されたプロジェクトをサブモジュールに変換して、将来の更新と制御を改善したいと考えています。これを行う方法について多くのことをグーグルで調べましたが、すべてのチュートリアルでは、サブモジュールを新たに追加する方法についてのみ説明しています。誰でも私を助けることができますか?

4

3 に答える 3

13

既存の git リポジトリをサブモジュールとして追加することは、新しいものを追加することと同じです。

  1. 最初に、すべての git リポジトリを含むフォルダーを、それ自体を git リポジトリとして作成しますgit init
  2. を使用git submodule add https//example.com/remoterepo ./localrepo./localrepoます。 は既存の git リポジトリです。
    • 注:remoterepoからの URL を取得しますlocalrepo/.git/config
  3. サブモジュールとして追加するすべての既存のリポジトリに対して、2 番目の手順を繰り返します。
  4. これで、実行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 のバグなのか何なのかわかりません。しかし、編集は完全に間違っているため、今でも拒否されています。コメントで理由を説明しました。私は誰にも不快感を与えませんが、これは私の時間を無駄にしました。答えが役に立たない場合は反対票を投じてください。

繰り返しますが、改善しない場合は、私の回答を編集しないでください。

于 2013-05-24T03:30:47.360 に答える