Mac→Windows移行前にGitリポジトリを大掃除した話【未プッシュ確認&不要削除】
開発環境をiMacからWindowsに移行することになりました。単純にリポジトリをcloneし直せばいいかと思っていたのですが、ふと気づいたことが。
「そもそも、どのリポジトリに未プッシュの作業があるんだっけ?」
GitHubを見返すと、学習用やテスト用で作ったまま放置しているリポジトリがずらり。これを機に、しっかりと整理してからWindows環境を構築することにしました。
なぜ移行前の整理が重要なのか
環境移行は、リポジトリを見直す絶好のチャンス。以下の理由で整理をおすすめします。
- 作業漏れ防止: 未プッシュのコミットや作業中ファイルの取りこぼし回避
- 効率的な移行: 必要なリポジトリだけを新環境にクローン
- 管理負担軽減: 使わないリポジトリの削除でメンテナンス工数削減
- セキュリティ向上: 古いリポジトリに潜む脆弱性リスクの排除
Phase 1: 未プッシュ作業の確認
各リポジトリで以下のコマンドを実行し、移行前に処理すべき作業がないかチェックしました。
基本的な確認コマンド
# 1. 現在の作業状態を確認
git status
# 2. リモートの最新情報を取得
git fetch
# 3. 未プッシュのコミットを確認
git log origin/main..HEAD
# 4. stash済みの作業を確認
git stash list
# 5. ブランチの同期状態を確認
git branch -vv
実際の確認例
ケース1: クリーンな状態のリポジトリ
nakayamamasayuki@nakayamamasayukinoiMac asao-green % git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
nakayamamasayuki@nakayamamasayukinoiMac asao-green % git log origin/main..HEAD
# (何も表示されない = 未プッシュのコミットなし)
nakayamamasayuki@nakayamamasayukinoiMac asao-green % git stash list
# (何も表示されない = stashなし)
nakayamamasayuki@nakayamamasayukinoiMac asao-green % git branch -vv
* main c7c67ef [origin/main] post 2506
判定結果: 完全にクリーン。Windows側でcloneするだけでOK。
ケース2: 未コミットの変更があるリポジトリ
nakayamamasayuki@nakayamamasayukinoiMac Auto-GPT % git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: classic/original_autogpt/.env.template
Untracked files:
(use "git add <file>..." to include in what will be committed)
data/
no changes added to commit (use "git add" and/or "git commit -a")
判定結果: .env.template
の変更とdata/
ディレクトリが未追跡。内容を確認して保存or破棄を決定。
効率的な確認方法
全リポジトリで同じ作業を繰り返すので、以下のワンライナーで効率化できます:
# 主要情報をまとめて確認
git status --porcelain && echo "--- Unpushed commits ---" && git log --oneline origin/main..HEAD
Phase 2: GitHub制限の理解
リポジトリ整理の前に、GitHubの制限について調べてみました。
リポジトリ数制限
- 上限: 2025年4月28日から個人アカウントで100,000リポジトリ
- 警告: 50,000リポジトリ超過でバナー表示
- 現実的影響: 一般的な開発者には無関係な数値
ストレージ制限
- 推奨サイズ: リポジトリあたり1GB未満
- 強く推奨される上限: 5GB未満
- ファイルサイズ: 単体ファイル100MB超過でブロック
- 実際の運用: 厳密な制限というより推奨値
結論
容量制限は心配無用。むしろ管理効率とセキュリティの観点で整理すべし。
Phase 3: リポジトリ棚卸し作業
削除候補の判断基準
以下の基準でリポジトリを分類しました:
即削除対象
- 学習用リポジトリ: チュートリアルやテスト用
- 1年以上放置: 最終コミットが古い
- 重複プロジェクト: 似たような機能で複数存在
- 実験失敗作: うまくいかなかった試行錯誤
保持対象
- 現在進行中: アクティブに開発中
- 本番運用: 実際に使用されている
- 将来使用予定: 具体的な計画がある
- 参考価値: 後で見返す可能性が高い
判断に迷った場合
「半年以内に触る可能性があるか?」で決定。
実際の整理作業
GitHub上で40以上あったリポジトリを約半分まで削減。主な削除対象:
- 各種フレームワークの学習用リポジトリ
- 「hello-world」系のテストリポジトリ
- 途中で放置したプロトタイプ
- 複数作成した類似プロジェクト
スプレッドシートでの管理
移行作業の進捗管理用にスプレッドシートを作成:
リポジトリ | check | data |
---|---|---|
Takayama | 1 | |
asao-green | 1 |
チェック済みのものは「1」を記入し、作業状況を可視化しました。
Phase 4: 移行戦略の実行
クリーンな状態での移行
整理後のリポジトリリストを元に、Windows環境では必要なもののみクローン:
# 必要なリポジトリのみ順次クローン
git clone https://github.com/username/essential-project.git
cd essential-project
# 開発環境セットアップ
未処理作業の対応
移行前に発見した未コミット作業は以下で対応:
# 保存する場合
git add .
git commit -m "WIP: work before environment migration"
git push origin main
# 破棄する場合
git restore [ファイル名]
git clean -fd # 未追跡ファイル削除
Phase 5: 継続的整理のベストプラクティス
定期棚卸しの習慣化
3ヶ月ルール: 四半期ごとにリポジトリを見直し
# 最終更新日確認
git log -1 --format="%ci" HEAD
年次大掃除: 年末年始に大規模な整理
命名規則での予防
learning-*
: 学習用(定期削除対象)archive-*
: 保管用(参照のみ)wip-*
: 作業中(放置注意)prod-*
: 本番用(慎重に扱う)
プロジェクト終了時の片付け
- 完了時: 不要ブランチの削除
- 中止時: アーカイブ化or削除判断
- 引き継ぎ時: ドキュメント整備
Phase 6: 移行完了とその効果
移行作業の軽減効果
- 作業時間短縮: 必要なリポジトリのみで効率UP
- エラー削減: 古い依存関係やconfig問題の回避
- ストレージ節約: ローカルディスク容量の最適化
今後の開発効率向上
- 検索性向上: 目的のリポジトリを素早く発見
- メンテナンス軽減: 管理対象の削減
- セキュリティ強化: 古いリポジトリのリスク排除
学んだこと
- 移行は整理のチャンス: 環境変更時の見直しの重要性
- 定期的な棚卸し: 放置リポジトリの蓄積防止
- 判断基準の明確化: 迷わない削除ルールの策定
まとめ
iMacからWindowsへの移行という機会を活用して、GitHubリポジトリの大掃除を実施しました。結果として:
- 40以上のリポジトリを約半分に削減
- 未プッシュ作業の漏れなく確認
- 効率的な新環境構築
- 継続的整理の仕組み構築
開発環境の移行は面倒に感じがちですが、これまでの作業を見直し、より効率的な環境を構築する絶好の機会でもあります。
皆さんも環境移行の際は、ぜひリポジトリの棚卸しから始めてみてください。きっと新しい環境での開発効率が格段に向上するはずです。
今回使用したコマンド一覧
# 基本確認
git status
git fetch
git log origin/main..HEAD
git stash list
git branch -vv
# 効率確認
git status --porcelain && echo "--- Unpushed commits ---" && git log --oneline origin/main..HEAD
# 最終更新確認
git log -1 --format="%ci" HEAD
# 作業保存
git add .
git commit -m "message"
git push origin main
# 作業破棄
git restore [file]
git clean -fd