最近、複数の開発環境用に作っていたDockerリポジトリを1つのリポジトリにまとめる「棚卸し」をしました。
React, Python, Java, HTML/CSS, Node.js, Laravel, Jupyter などの環境を、
すべて履歴ごとまとめて PolyDock
という統一リポジトリに統合。
最終的な成果物はこちら👇
🔗 PolyDock GitHub リポジトリ
🎯 課題
- 各言語・フレームワークのDocker環境が別々のリポジトリで管理されていて、再利用や更新が面倒
- CI/CDのセットアップや共通処理がバラバラになっていた
- フルスタックで開発する際に横断的な整理ができていなかった
✅ 解決方法:履歴を保持したまま統合
Gitには、履歴を保持したまま他のリポジトリをサブディレクトリとして取り込む方法があります。
🧭 作業ステップ(例: docker-python
を docker-python/
に統合)
1. --mirror
で履歴付き clone
git clone --mirror git@github.com:hellomyzn/docker-python.git
2. git filter-repo
でサブディレクトリ化
cd docker-python.git
git filter-repo --to-subdirectory-filter docker-python
cd ..
3. 一時作業用リポジトリを作って checkout
mkdir merge-python
cd merge-python
git init
git remote add origin ../docker-python.git
git remote show origin # ← ブランチ名確認(main or master)
git pull origin master # 例:master
cd ..
4. 統合先(polydock
)にマージ
cd polydock
git remote add python ../merge-python
git fetch python
git branch -r # 確認
git merge --allow-unrelated-histories python/master -m "Import docker-python"
5. コンフリクトがあれば修正して commit
git status
code README.md # 修正
git add .
git commit
6. push!
git push origin main
🧹 最後に後片付け(重要!)
cd ..
rm -rf docker-python.git merge-python
※ 同様に他のリポジトリも docker-react
, docker-java
, docker-node
, など同じ流れで統合できます。
📦 統合後の構成(PolyDock)
polydock/
├── docker-python/
├── docker-react/
├── docker-java/
├── docker-html-css/
├── docker-node/
├── docker-laravel/
├── docker-jupyter/
└── README.md
💥 詰まったところ & 解決方法
内容 | 問題 | 解決方法 |
---|---|---|
git pull origin main に失敗 |
コメント付きでコマンド実行した |
# は無視されない。コメントは別の行に書く |
react/main - not something we can merge |
指定ブランチが存在しない |
git branch -r で正しいブランチ名を確認 |
Already up to date. と出る |
過去に中途半端にマージされた状態 |
git remote remove xxx → add → fetch でやり直し |
Merge conflict in README.md |
複数リポジトリに同名ファイル | 手動でマージしてコミット |
fatal: couldn't find remote ref |
ブランチ名のタイプミス or 存在しない |
git remote show origin で正しいブランチ確認 |
🧠 補足:git filter-repo
について
git filter-repo
は filter-branch
や subtree
の後継として公式が推奨している高速・簡単な履歴書き換えツールです。
# macOS (Homebrew)
brew install git-filter-repo
# Ubuntu (apt)
sudo apt install git-filter-repo
📌 今後やってみたいこと
-
Makefile
を使って各環境のビルド・起動を共通化 -
docker-compose.yml
で複数環境の一括起動 - 統一した Lint や CI の仕組み導入
🙌 最後に
複数リポジトリを抱えていて「散らかってきたな…」と思ってる人には、履歴ごとの棚卸し・統合は本当におすすめです!
PolyDockのように、1つのリポジトリで開発環境を管理することで見通しも良くなり、保守・運用も楽になります。