Ошибка при нажатии на github repo

При нажатии моих коммитов появляется следующая ошибка:

remote: warning: File var/log/system.log is 57.82 MB; this is larger than recommended maximum file size of 50 MB
remote: error: GH001: Large files detected.
remote: error: Trace: 96d01231dffac3fbc3ba1eb2e9f01a93
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File var/report/752246136671 is 100.86 MB; this exceeds github file size limit of 100 MB

Я попробовал следующие команды, перечисленные ниже:

git push -u origin master

не можете найти их в файлах git для фиксации, когда я набрал статус git.

Не могли бы вы сообщить мне, как отменить мои изменения в репо без этих ошибок? Я думаю, эти файлы находятся в индексе github. Я также попробовал git rm --cached var/log/system.log. но результатов нет.

ударяя головой к стене!

ОБНОВЛЕНИЕ 1 Пожалуйста, найдите Гистов здесь, основываясь на двух ответах экспертов ниже:

ОБНОВЛЕНИЕ 2 Пожалуйста, найдите ниже git Сведения о журнале для обоих файлов, которые я пытался удалить:

ОТВЕТ, ЧТО РАБОТАЕТ

Пожалуйста, найдите суть окончательного ответа, который решил мою проблему.

кредиты git экспертам VonC, Holger Just и всем другим экспертам, которые предоставили свои входы и, конечно же, в stackoverflow.

Ответ 1

git rm или git rm --cached недостаточно, чтобы удалить этот файл из истории, сохраненной в вашем репо.

Вам необходимо:

  • используйте BFG Repo Cleaner, как было предложено выше.

    bfg --strip-blobs-bigger-than 1M  my-repo.git
    
  • используйте git gc --agrressive --prune=now (после BFG), как описано в разделе Уменьшить размер хранилища git

  • git push -f, чтобы закрепить новую историю при удаленном репо.

Ответ 2

Сообщение содержит информацию о двух файлах. var/log/system.log генерирует предупреждение, но оно будет нажато. var/report/752246136671 слишком велика и, таким образом, предотвращает нажатие. Таким образом, вы должны удалить хотя бы последний файл.

Прежде чем Github позволит вам нажать, вам придется удалить файл из всех коммитов, которые вы хотите нажать. Недостаточно просто удалить файл в последующем коммите после добавления его ранее.

В соответствии с статьей, связанной с сообщением, вы можете выполнить одну из двух рекомендуемых операций:

Если вы добавили файл в последнюю фиксацию, вы можете изменить его, чтобы удалить файл:

git rm --cached var/report/752246136671
# Stage our giant file for removal, but leave it on disk

git commit --amend -CHEAD
# Amend the previous commit with your change
# Simply making a new commit won't work, as you need
# to remove the file from the unpushed history as well

git push
# Push our rewritten, smaller commit

Или вы можете использовать BFG для фильтрации вашего репозитория и удаления файла из всех коммитов. Это необходимо, если вы добавили файл в историю git (в отличие от только самого последнего коммита), вам нужно очистить свою историю. Github не позволит нажимать большой файл в любом коммите, даже если он будет удален позже. Это связано с тем, что в этом случае файл по-прежнему будет частью истории и, таким образом, раздувает репо.

Вы можете установить BFG из https://github.com/rtyley/bfg-repo-cleaner/releases/latest.

Вы можете удалить любую индикацию любых файлов размером более 100 МБ, выполнив следующую команду:

cd /path/to/your/git/repo
java -jar bfg.jar --strip-blobs-bigger-than 100M
# Git history will be cleaned - files in your latest commit will *not* be touched

Обратите внимание, что это изменит историю вашего репозитория, что приведет к потенциальному принудительному нажатию. Таким образом, вам, возможно, придется координировать работу с другими разработчиками.

Кроме того, если вам все еще нужен файл, вы должны сделать резервную копию, так как вы не сможете восстановить ее из git.

Ответ 3

Проблема заключается в том, что, хотя вы удалили соответствующие файлы с использованием новых коммитов, есть blobs, соответствующие старшим коммитам для тех же файлов в вашем репо, а размер 2 из этих объектов бросает вам предупреждение и ошибка. Чтобы снова нажать, вам нужно также удалить то же самое.

В то время как bfg-repo должен работать для большинства людей, чтобы исправить ситуацию здесь, он требует, чтобы java был установлен и настроен в системе, и это не всегда доступно.

У вас есть 2 файла var/log/system.log и var/report/752246136671, которые превышают лимит, поэтому я бы предложил использовать filter-branch для их удаления для решения git:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch var/log/system.log var/report/752246136671' --tag-name-filter cat -- --all

Возможно, вам понадобится принудительно нажать изменения позже (используя git push -f origin).

В общем случае хорошей практикой является игнорировать теги *.log, *.info и другие файлы журнала из репозитория git, используя запись *.log в вашем файле .gitignore. Аналогичным образом вы можете игнорировать папку var/reports.

Если есть файлы, которые уже были привязаны к репо и нажаты ранее, вам может потребоваться использовать git rm --cached "*.log", чтобы удалить их и зафиксировать эти изменения, чтобы их необрастали навсегда.

PS: Мне кажется, что установка magento/joomla для меня полностью игнорирует папку var в вашем .gitignore, вам не нужны объекты из var/cache или var/session и т.д., которые будут отслеживаться в репо.

Ответ 4

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

Если это так, сделайте это, чтобы исправить ошибку:

$ git rm var/log/system.log
$ git commit -m "Delete system.log file"
$ git push -u origin master