PR

GitHub のリポジトリを統合

1. はじめに

考えもなしに GitHub のリポジトリを作成していたら、いつの間にか大量のリポジトリができてしまいました。
GitLab にはグループで管理していましたが、GitHub には該当する機能(Teams ならできるかも)はなさそうです
新規でリポジトリを作成し、下の階層に突っ込んでしまえばいいのですが、既存のリポジトリの履歴を残したいと思いました。
調べていたところ、リポジトリの統合というやり方でできそう。ということがわかりました。
リポジトリを統合する手順を残しておきます。
先駆者がいるので、参考にさせていただきます。
【Git】2つのGitリポジトリを履歴を保持して統合したい

2. リポジトリの構成

現在のリポジトリは以下のようになっています。

~/repo_A
   |--- .git
~/repo_B
   |--- .git

これを以下のように統合します。

~/repo_top
   |--- .git
   |--- repo_A
          |--- .git
   |--- repo_B
          |--- .git

3. GitHub にリポジトリを作成

GitHub にリポジトリを作成します。
リポジトリ名は repo_top とします。
以下の作業はすべて、repo_top 直下で行います。

ローカルPCのどこか適当な場所に移動して、フォルダを作成します。
git clone で先ほど作成したリポジトリを取得します。
続いて、repo_Arepo_B を入れるフォルダを作成します。
その中に、.gitkeep ファイルを作成します。
今の構成はこんな感じです

~/repo_top
   |--- .git
   |--- repo_A
          |--- .gitkeep
   |--- repo_B
          |--- .gitkeep

フォルダ含め、全てをコミットします。

4. 統合するリポジトリをリモートリポジトリとして追加

repo_Arepo_B をリモートリポジトリとして追加します。

cd ~/repo_top
git remote add repo_A <repo_A リポジトリのURL>
git fetch repo_A
cd ~/repo_top
git remote add repo_B <repo_B リポジトリのURL>
git fetch repo_B

リモートに追加されたか確認します。

git remote -v
# origin  https://github.com/xxxxxxxx/repo_top.git (fetch)
# origin  https://github.com/xxxxxxxx/repo_top.git (push)
# repo_A       https://github.com/xxxxxxxx/repo_A.git (fetch)
# repo_A       https://github.com/xxxxxxxx/repo_A.git (push)
# repo_B       https://github.com/xxxxxxxx/repo_B.git (fetch)
# repo_B       https://github.com/xxxxxxxx/repo_B.git (push)

5. リポジトリの統合

merge で統合します。
merge 実行の際、コメントメッセージの入力画面が開きますが、そのまま保存して終了します。

git merge --allow-unrelated-histories -X subtree=repo_A repo_A/master
git merge --allow-unrelated-histories -X subtree=repo_B repo_B/master

6. GitHub に push

.gitkeep ファイルを削除して、統合したリポジトリを GitHub に push します。

git push origin master

7. お片付け

履歴を確認したところ、統合したリポジトリの履歴が残っていることを確認しました。
あとは、GitHub のリポジトリを削除して完了です。

8. まとめ

GitHub のリポジトリを統合する手順を残しておきました。
リポジトリを統合することで、リポジトリの数を減らすことができます。
リポジトリの数が多くなると、管理が大変になるので、定期的に整理することをお勧めします。

A. 参考サイト

B. 参考書籍

コメント