【Git】GitHub 管理下にある Pods を外す

今までは Pods で生成したコードも GitHub で管理していたのですが、100MB 以上ある SDK がちらほらと出始めたので、Git の制限もあるし、ここらへんでいっそ外してしまおうと決意し、それを外すまでの作業工程を残します。

GitLFS も考えたのですが、1GBの無料ストレージ/無料帯域を使い切ったら有料になるし、これから SDK によっては大きくなるものも増えてくると思ったので、リモートリポジトリから Pods を省くことにしました。

ので!
Pods 配下もリモートリポジトリで管理すべき!とかって話は聞きません (`・ω・´)キリッ
タイトル通り、GitHub 管理下にある Pods を外したい方だけご一緒に。

開発環境(前提条件)

・macOS BigSur(ver11.1)
・Xcode12.4
・CocoaPod(Carthage不使用)
・GitHub(Pods配下もプッシュ済み)

さっそく作業へ

管理外にしたいファイルを指定する

git の管理外にしたいファイルを指定するために、ターミナルで .gitignore というファイルを作成します。
このファイルに書かれたファイルは Git のトラッキング対象外になるので、Pods もここで指定します。

% cd documents/ios/your_project    // 対象のプロジェクトに移動
% vi .gitignore                    // エディタモードで .gitignore を作成

エディタモードに切り替わったら、i を押して入力モードにします。
コードはテンプレートがあるので、そこから一部を抜粋します。

# Mac
.DS_Store

## User settings
xcuserdata/

## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout

## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
*.xcworkspace

コピペしたら esc を押して入力モードを終了 → :wq を入力してファイルを保存します。

すでに 100MB を超えたファイルがある人は

私なんですけどね Σd(゚∀゚d)
使っていた SDK がアップデートを重ねるうちに 100MB を越すという。笑
リポジトリにプッシュしようとしたら、以下のようなエラーが発生。

% git push origin your_branch
.
.
.
remote: warning: File ***50MB超えファイルパス*** is 55.00 MB; this is larger than GitHub’s recommended maximum file size of 50.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage – https://git-lfs.github.com.
remote: error: Trace: ***乱数***
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File ***100MB超えファイルパス*** is 119.41 MB; this exceeds GitHub’s file size limit of 100.00 MB

ってエラーが出るので、上記エラーの下部にある ***100MB超えのファイルパス*** をリポジトリに追加してなかったことにする必要があります。

普通に削除したところで、他の履歴にはそのファイルが残るので、全く解決しまーせん。
そこで、そのファイルがリポジトリに追加してなかったことにします。

はい、git 触ってたら分かると思いますが、「なかったことにする」ので要注意ですね (´・ω・`;A)

そんな要注意コマンドがこちら。

% git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ***100MB超えファイルパス***' --prune-empty --tag-name-filter cat -- --all
% git commit --amend -CHEAD

//---------- 黒魔術的なコマンドではいけないので補足 ----------//

filter-branch          // 大量のコミットの書き換えを機械的に行う
--force                // 強制執行する特攻野郎
--index-filter         // コミットするファイルの一覧(インデックス)を書き換えるためのフィルタ
--cached               // インデックスに登録されたファイルに対して削除を行う。指定しなかったらワークツリーからも成仏
--ignore-unmatch       // 削除したいファイルが存在しなくても気にしません(必ず true を返す)
--prune-empty          // 削除したときにコメントだけの空コミットがあったら消してくれる
--tag-name-filter cat  //タグの参照も更新してくれる
-- --all               // 連続ハイフンで前のコマンドのオプションから抜け、--all で全ブランチを対象に同じ処理をする

って感じですね。全部意味のある黒魔術です。

ちなみにこの処理はプロジェクトによっては時間がかかるので、気をつけて下さい。
完了したらプッシュするのですが、もちろん強制執行です。

% git push -f origin your_branch

これでリモートリポジトリから 100MB を越すファイルが削除できました。
危険な道草くってねーで本題に戻ります!

Git の管理下から Pods を外す

いよいよ Pods を Git の管理下から外します。

% git rm -r --cached Pods

コレダケ。(道草の方が長いぜ)
git rm というコマンドは、Git の管理下にあるファイルやフォルダを削除するコマンドです。
さっきの道草でもでてきましたが、--cached がないと、ファイルそのものが削除されるので注意してください!
そのあと、以下の手順で反映したら終了です。

% git add --all
% git commit -m "適当なメッセージ"
% git push -u origin master

【2021年2月20日:追記】
忘れてました。タグの参照も更新したので、それもリモートに送信しないといけません。

% git push -f origin master

これでタグも反映された状態です!

さいごに

個人的には道草が茨すぎて傷だらけでした (´;д;`)ウッ
でも git を見たら Pod が管理されていなかったので、めっちゃスッキリしました!!
あと3つ同じ事をしたいプロジェクトがあるので、この記事見ながら頑張ります。笑

あ、もちろん自己責任でお願いします!

Git
スポンサーリンク

コメント