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_A
と repo_B
を入れるフォルダを作成します。
その中に、.gitkeep
ファイルを作成します。
今の構成はこんな感じです
~/repo_top
|--- .git
|--- repo_A
|--- .gitkeep
|--- repo_B
|--- .gitkeep
フォルダ含め、全てをコミットします。
4. 統合するリポジトリをリモートリポジトリとして追加
repo_A
と repo_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 のリポジトリを統合する手順を残しておきました。
リポジトリを統合することで、リポジトリの数を減らすことができます。
リポジトリの数が多くなると、管理が大変になるので、定期的に整理することをお勧めします。
コメント