Кажется, я больше не могу нажимать, после обновления подфайла .gitignore не работает и возврат к предыдущим коммитам тоже не - PullRequest
0 голосов
/ 07 апреля 2019

Я обновил свои модули и пытаюсь внести некоторые изменения в мой проект.Тем не менее, я попробовал все, git хранилище больших файлов, поместил мой подфайл в файл .gitignore, и он все еще не работает.Я даже вернулся к предыдущим коммитам до того, как обновил пакеты, но он все еще не работает.

Я получаю ошибку:

! [remote rejected]

File Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds is 62.95 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB

Почему он продолжает говоритьчто если я поместил каталог Pods в свой .gitignore?

Я попытался кэшировать каталог, используя

git rm --cached Pods

Все еще безуспешно.

Я попытался создатьновая ветка, удаляющая Podfile и добавляющая, фиксирующая и нажимающая, все еще не работает.

Я пробовал

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Pods' 

Это все еще не работает.

У меня естьпопытался поместить это в мой gitignore

Pods/*

git add .gitignore
git commit -m 'update .gitignore'

Затем нажал, это все еще не работает.Я понимаю, что мне, возможно, придется удалить Google AdMobs из моего удаленного репозитория, но я не уверен, как это сделать?

1 Ответ

0 голосов
/ 07 апреля 2019

TL; DR

Вы, вероятно, хотели:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods'

Обратите внимание на -r здесь. Но читайте дальше, если это не совсем то, что вы имели в виду.

Long

Когда вы запускаете git push, ваш Git подключается к другому Git - в данном случае к GitHub - и предлагает ему commits . Это не файлы: , это коммит . Но коммиты содержат файлы. Таким образом, настоящий вопрос здесь заключается в следующем: какой коммит или коммит является вашим Git, отправляющим их Git, которые содержат файл:

Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds

Вы хотите избавиться от этих коммитов, возможно, заменив их новыми и улучшенными коммитами, которые содержат все остальные файлы, но не этот файл.

Вы подошли довольно близко с этим:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Pods' 

потому что git filter-branch означает, что берет коммиты, достижимые из начальных точек, которые я перечисляю, и копирую их в новые и улучшенные коммиты замены, к которым применены эти фильтры: <вставить список ваших фильтров здесь>. Есть два способа, которыми это могло пойти не так, один из которых наиболее вероятен:

  • Соответствующие коммиты недоступны из вашего текущего коммита. Для длительного обсуждения названий веток и достижимости прочитайте учебное пособие по Think Like (a) Git . Этот веб-сайт - хорошая идея, если вы некоторое время использовали Git.

    Причина, по которой это не , вероятно, там, где что-то пошло не так, заключается в том, что по умолчанию git push отправляет коммиты, которые находятся в вашей текущей ветке (за исключением того, что вам не нужно отправлять те, которые Git на GitHub еще не имеет). Это также значение по умолчанию для git filter-branch: все фиксации в ветке current . Поскольку вы не указали ни одной начальной точки, обе команды работали в ветви current .

    (Вы не указали ни свою действительную команду git push, ни вашу версию Git, поэтому мне пришлось сделать разумное предположение. В противном случае я мог бы быть на 100% уверен, что это не проблема.)

  • Фильтр, который вы перечислили, не подходит для выполнения улучшений.

    Фильтр, который вы дали, был индексным фильтром, состоящим из запроса на удаление файла с именем Pods, без жалоб, если такого файла нет. Файл, который нужно удалить, вообще не называется Pods, он называется Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds.

    Вы можете добавить флаг -r, который говорит Git удалить любой файл, путь к которому начинается с Pods/. Это приведет к удалению не только Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds, но и Pods/This/Is/A/Silly/Made/Up/File/Name и т. Д.

    Или вы можете прописать один конкретный файл и убрать флаг -r.

  • Или, конечно, могут применяться обе ситуации, но я бы поставил только на среднюю - вы хотите улучшить --index-filter.

Будет ли улучшено использование -r, или прописано полное имя файла, или что-то среднее между ними - возможно:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework'

или

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods/Google-Mobile-Ads-SDK'

Например - это вопрос, на который могут ответить только вы: какие файлы вы хотите в своих коммитах, а какие - нет? (Обратите внимание, что коммиты не содержат никаких каталогов, в некотором смысле: они содержат только файлы , как указано их полными именами. Git автоматически создаст любые содержащие каталоги, если и когда это необходимо.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...