Mac→Windows移行前にGitリポジトリを大掃除した話【未プッシュ確認&不要削除】

Mac→Windows移行前にGitリポジトリを大掃除した話【未プッシュ確認&不要削除】

alt text

開発環境を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」系のテストリポジトリ
  • 途中で放置したプロトタイプ
  • 複数作成した類似プロジェクト

スプレッドシートでの管理

移行作業の進捗管理用にスプレッドシートを作成:

リポジトリcheckdata
Takayama1
asao-green1

チェック済みのものは「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