質問するログイン新規登録
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2510閲覧

XcodeのローカルリポジトリにPodfileを含めてコミットしてしまい、Githubへプッシュする際にエラーが発生してしまいます

sonko

総合スコア2

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/08/17 08:05

編集2021/08/18 11:27

0

0

XcodeのローカルリポジトリにPodfileを含めてコミットしてしまい、Githubへプッシュする際にエラーが発生してしまいます。

エラー: SecureTransport error: I/O error. (-1)
エラーはプッシュするファイルの容量が100Mbを超えてしまう為のようです。

ターミナルにて git rm --cached Pods、他を行いgit上からPodsを外しコミット後プッシュ、
コピーしたファイルでPods自体のファイルを削除しコミット後プッシュしますが同様のエラーが発生します。

Podfileの含まれていないプロジェクトのプッシュは問題なく行えます。

何か考えられる原因やgit操作の不足などありますでしょうか。
恐れ入りますがご教示いただけますと幸いです。

8/18追記 回答頂いた手順に沿って行なったrebase後
![]

8/18追記 回答頂いた手順に沿って行なったrebase後

8/18追記 Xcode上でPush

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/08/17 08:58

git rm --cached Pods だと過去の履歴に Pods フォルダが残るため、プッシュするファイルの容量は減りません。 プッシュする容量を減らすには、Pods フォルダを追加したコミットにさかのぼって履歴を改変する必要があります。
sonko

2021/08/17 10:50

追記いただきありがとうございます。 その様な仕組みになっていたのは恥ずかしながら存じ上げませんでした。 履歴から変更できるか試してみます。ありがとうございます。
hoshi-takanori

2021/08/17 12:24

履歴のいじり方で分からないことがあったら、ここで聞いてくれれば答えますよ。 また、そもそも最近はライブラリの管理に CocoaPods ではなく Swift Package Manager を使うことも増えてきてるかも…。
sonko

2021/08/17 12:34

ご親切にありがとうございます。 困っていたのでそう言っていただけるのは本当に嬉しく思います。 お手隙の際に履歴の変更方法についてお伺いしてもよろしいでしょうか。 Swift Package Manager調べてみます!ありがとうございます。
hoshi-takanori

2021/08/17 12:42

まず確認ですが、git の操作には何をお使いでしょうか? また、Terminal でのコマンド操作には慣れてらっしゃいますか? そして、差し支えなければ git log --oneline --graph --all の結果をお知らせください。
sonko

2021/08/17 12:53

恐れ入ります。 gitはXcode上でのコミットのみになります。 Podsの追加、今回の件でTerminalにて操作を行う経験のみです。 ご教示頂きました件下記の通りです。 9c60d13 (HEAD -> develop) お気に入りと、登録中リスト完成 * 665f071 登録中リスト、データベースからのロード追加 * f23d07b detailVCからFavoriteVCに戻る際にプロトコルを使用してFavoriteVC側でmodalが閉じたことを検知してtableViewをリロードする機能追加 * f22af7c test * 3aff086 (main) Initial Commit
hoshi-takanori

2021/08/17 13:17

なるほど。develop ブランチを作って作業されてるんですね。そして、Pods フォルダをコミットしたのはどのコミットか分かりますか?
sonko

2021/08/17 13:23

ご返信いただきありがとうございます。 最近git操作を始めてブランチなどの知識もない中で試行錯誤しております... 3aff086 (main) Initial CommitにてPods等のファイル全てをローカルリポジトリとしてコミットしました。 よろしくお願い致します。
hoshi-takanori

2021/08/17 14:10

最初のコミットから Pods フォルダを登録してたんですね。ということは git rebase -i --root (まだしないで!) する必要がありますが、問題はここで vi などのターミナルで動くエディタが起動することですね。たぶん vi 使ったことないですよね…。
sonko

2021/08/17 14:29

仰る通り最初のコミットでPodsを登録しております。 vimコマンドでしょうか。勘違いしていましたら申し訳ありません。 esc :wqで閉じるといったコマンドくらいですが操作したことはあります。 必要とあれば調べながら行いますが... 夜遅くまで回答頂き感謝の気持ちでいっぱいです。本当にありがとうございます。
hoshi-takanori

2021/08/17 14:33

はい、vim のことです。現在 vim を使わずに何とかする方法を調べてますので、少々お待ちください。
sonko

2021/08/17 14:38

ご親切にありがとうございます。 急ぎではありませんので、お手隙の際にご返信いただけますと幸いです。 念の為vimの操作について確認致します。
guest

回答1

0

ベストアンサー

単純に git rm --cached Pods しても、過去の履歴には Pods フォルダが残り、プッシュする容量は減りません。
プッシュする容量を減らすには、Pods フォルダを追加したコミットにさかのぼって履歴を改変する必要があります。

まず、履歴を確認しましょう。(なお、$ はシェルのプロンプトなので、打ち込む必要はありません。)

$ git log --oneline --graph --all * 9c60d13 (HEAD -> develop) 最新のコミット * (略) * 3aff086 (main) Initial Commit

また、コミットされてない変更がないことをご確認ください。(変更がある場合は、コミットまたはスタッシュしましょう。)

$ git status On branch develop nothing to commit, working tree clean

今回の場合、Initial Commit の時点で Pods フォルダが含まれていたとのことなので、すべての履歴を書き換えることになります。vim が使えるなら、git rebase -i --root すると次のような画面が現れますので、最初の pick を edit に書き換えて保存します。(が、vim が苦手な人はやらないでください。)

pick 3aff086 Initial Commit pick (略) pick 9c60d13 最新のコミット # Rebase 9c60d13 onto 59b86fa (3 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # (以下略)

代わりに、次のコマンドを実行すると、自動的に最初の pick を edit に書き換えて rebase します。(打ち間違えないようにコピペ推奨。)

$ GIT_SEQUENCE_EDITOR="sed -i -re '1s/pick/edit/'" git rebase -i --root Stopped at 3aff086... Initial Commit You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue

ここで履歴の改変を行います。今回の場合、Pods フォルダを履歴から削除します。

$ git rm -r --cached Pods rm 'Pods/...'

次に改変した履歴をコミットしますが、普通に git commit --amend だとまた vim が起動してしまうので、--no-edit をつけてコミットメッセージはそのままでコミットします。

$ git commit --amend --no-edit [detached HEAD xxxxxxx] Initial Commit (以下略)

そして、残りの履歴をやり直します。

$ git rebase --continue Successfully rebased and updated refs/heads/develop.

Successfully 〜 と表示されれば成功ですが、もしも失敗したらコメント欄にエラーメッセージを貼り付けてご相談ください。

念のために元のソースと比較しておきましょう。この際、普通に git diff だと削除したファイルの中身がすべて表示されてしまうので、--stat オプションをつけてファイル名だけ表示させると良いでしょう。なお、9c60d13 というのは元の最新のコミットのハッシュ値になります。

$ git diff --stat 9c60d13 Pods/... | xxx - xxx file changed, xxx deletion(-)

Pods フォルダの中身だけが削除されていることをご確認ください。


以上で作業中のブランチ (develop) の rebase は完了ですが、今回はその他に main ブランチがありますね。これを新しい Initial Commit を指すようにするには、まず新しい履歴を確認して、

$ git log --oneline xxxxxxx (HEAD -> develop) 最新のコミット yyyyyyy (略) zzzzzzz Initial Commit

いったん main ブランチを削除して、新しいコミット (zzzzzzz のところに表示されているもの) に付け替えると良いでしょう。

$ git branch -D main Deleted branch main (was 3aff086). $ git branch main zzzzzzz

もう一度履歴を確認して、Initial Commit の前に (main) と表示されれば成功です。

$ git log --oneline xxxxxxx (HEAD -> develop) 最新のコミット yyyyyyy (略) zzzzzzz (main) Initial Commit

投稿2021/08/17 15:36

hoshi-takanori

総合スコア7903

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sonko

2021/08/18 07:02 編集

ご丁寧に分かりやすく回答頂き誠にありがとうございます。 夜分遅くまで調査頂き深く感謝申し上げます。 ご教示いただきました手順にて進めたところrebaseは成功した様に見えます。 @MacBook SubscriptionSearchのコピー % git branch -D main Deleted branch main (was 3aff086). @MacBook SubscriptionSearchのコピー % git branch main a960f00 @MacBook SubscriptionSearchのコピー % git log --oneline ac99ca3 (HEAD -> develop) 登録数順にhomeViewのコンテンツを並び替え 登録中、お気 に入りボタンが押されている数を計測機能 5c5ba20 お気に入りと、登録中リスト完成 34ddc68 登録中リスト、データベースからのロード追加 7a94a0e detailVCからFavoriteVCに戻る際にプロトコルを使用してFavoriteVC側でmodal が閉じたことを検知してtableViewをリロードする機能追加 bdb4239 test a960f00 (main) Initial Commit そこでGithubへpushを行いましたが同様のエラーが発生してしまいます。 SourceControlにもう一つ変わらずに存在するPodsファイルがあり、こちらが原因かと思いましたが いかがでしょうか。 私の無知で当たり前の様なことを見逃していましたら申し訳ございません。
hoshi-takanori

2021/08/18 07:50

その Pods を追加したのはどのコミットか分かりますか?
sonko

2021/08/18 09:02

ご返信頂きありがとうございます。 Initial commit とあるので初めてのコミット時に追加しております。 質問本文へ画像を追加いたしました。お手数をお掛けいたしますがご確認いただいてもよろしいでしょうか。 よろしくお願い致します。
sonko

2021/08/18 09:19

お世話になります。 cd Podsファイル内にて Pods % git log --oneline --graph --all で確認致しましたところ Xcodeと同様のコミットを発見いたしました。 * 08d5c87 (HEAD -> main) Initial Commit こちらを同様の手順でPodsのキャッシュを削除すればよろしいでしょうか。
hoshi-takanori

2021/08/18 09:35

その Pods フォルダ内にさらに .git フォルダがあるってことでしょうか? なぜそんなことに…。
sonko

2021/08/18 10:02

仰る通りPodsフォルダ内にも.gitがある様です. xcode上でコミットする際、念の為とコミットするファイルを全て選んだところこのようになってしまいました。
hoshi-takanori

2021/08/18 10:12

Pods フォルダ内の .git は消していいのではないかと思いますが、ちょっと怖いですね…。 その前に push を成功させたいのですが、push って Xcode からやってますよね。その時、どれを push するかを選べると思うのですが、Pods の方のチェックボックスを外して push してみてください。 それでもエラーが出るようなら、そもそもエラーの原因は Pods フォルダじゃなかったってことになりますね…。
sonko

2021/08/18 11:31

ご返信いただきありがとうございます。 pushはXcodeから実施しています。仰るようにpushの内容を選択できたためPodsを外してpushを行いましたが同じエラーが発生しました。本文に写真を追加しました。 問題はPodsのgitではないということですね...
hoshi-takanori

2021/08/18 12:01

大きなファイルを探しましょう。次のコマンドを実行するとどうなりますか? find . -type f -size +50M -exec ls -l {} \;
sonko

2021/08/18 12:22

特に返信はありませんでしたが、+10Mで調べると1つファイルが見つかりました。
hoshi-takanori

2021/08/18 12:26

そのファイルはプロジェクトで使っているものですか? それとも見覚えのないものでしょうか?
sonko

2021/08/18 13:39

ご返信いただきありがとうございます。 特に見覚えのあるファイルではありません。 元のファイルをコピーして一度削除してみようと思います。 よろしくお願い致します。
hoshi-takanori

2021/08/18 21:13

そのファイルがどこにあるかを聞くべきだったかも。Pods の中か、Pods/.git の中か、それ以外か。 いずれにせよ、まず git ls-files と見比べて、それが git で管理されてるかをご確認ください。 また、履歴から消し去る場合、そのファイルが追加されたコミットを突き止めて、回答欄の手順を行うことになりますが、追加されたのが最初のコミットでない場合、〜 git rebase -i --root の --root の代わりに、追加された一歩手前のコミットハッシュを指定する必要があります。
sonko

2021/08/19 12:52

ご丁寧にありがとうございます。 Pods内のファイルの様です。ご教示頂いたことでわからないこともあるので 調べながらもう少し解決できるよう試行錯誤してみます。ありがとうございます。
sonko

2021/08/19 14:49

お世話になります。 一度コピーしたファイル内で  $ rm -rf .git にて .gitを削除し、Xcode上でリポジトリを作成し直しました。 その際Podsの選択を外すことでプロジェクトファイルのみのリポジトリにしPushしましたが同様のエラーが発生しました。一度ファイル内を確認するとAssetsフォルダが75Mbほどありこちらを削除しコミット、プッシュで無事Githubにアップロードすることができました。正しい方法では無いかと存じますが、ひとまずPushすることができました。hoshi-takanori様の本当に親切で分かりやすいご助力あってのことと思います。改めて感謝申し上げます。ありがとうございました。まだわからないことがあるので引き続き調査したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問