Igor
Igor

Reputation: 6255

How do I fix this error with Git

ALL,

Igors-MacBook-Air:dbhandler igorkorot$ cat .gitignore | grep ipch
dbhandler/ipch/

Igors-MacBook-Air:dbhandler igorkorot$ git rm -r dbhandler/ipch
rm 'dbhandler/ipch/dbinterface-19274bfe/dbinterface-5ede7563.ipch'
rm 'dbhandler/ipch/dbloader-ce428aa/dbloader-61894527.ipch'
rm 'dbhandler/ipch/dll_vc9_my_dll-b99cc480/dialogs-c6b7929.ipch'
rm 'dbhandler/ipch/docview_vc9-e1a2d063/docview-4c99da7.ipch'
rm 'dbhandler/ipch/sqlite-386a740f/sqlite-1af4ae5c.ipch'
Igors-MacBook-Air:dbhandler igorkorot$ git commit -m "Remove MSVC build files"
[master 69327de] Remove MSVC build files
 5 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 dbhandler/ipch/dbinterface-19274bfe/dbinterface-5ede7563.ipch
 delete mode 100644 dbhandler/ipch/dbloader-ce428aa/dbloader-61894527.ipch
 delete mode 100644 dbhandler/ipch/dll_vc9_my_dll-b99cc480/dialogs-c6b7929.ipch
 delete mode 100644 dbhandler/ipch/docview_vc9-e1a2d063/docview-4c99da7.ipch
 delete mode 100644 dbhandler/ipch/sqlite-386a740f/sqlite-1af4ae5c.ipch

Igors-MacBook-Air:dbhandler igorkorot$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Counting objects: 401, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (323/323), done.
Writing objects: 100% (386/386), 98.53 MiB | 726.00 KiB/s, done.
Total 386 (delta 148), reused 45 (delta 13)
remote: warning: File dbhandler/docview_vc9.sdf is 58.89 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: warning: File dbhandler/ipch/sqlite-386a740f/sqlite-1af4ae5c.ipch is 55.25 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: warning: File dbhandler/ipch/dbinterface-19274bfe/dbinterface-5ede7563.ipch is 53.94 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: c4b823789a274ab658515b65b7b259a6
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File dbhandler/ipch/dll_vc9_my_dll-b99cc480/dialogs-c6b7929.ipch is 153.44 MB; this exceeds GitHub's file size limit of 100.00 MB
To https://github.com/oneeyeman1/dbhandler.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/oneeyeman1/dbhandler.git'

The trouble is that dbhandler/ipch is part of .gitignore, but "git push" is still trying to push those to the remote.

Or am I misunderstanding something and I need to do something else?

Thank you.

[EDIT]

That command fails:

Igors-MacBook-Air:dbhandler igorkorot$ git filter-branch --index-filter 'git rm --cached dbhandler/ipch'
Rewrite f594d547c7f8354048d5df8b8b3e9a038b2be38a (1/97)fatal: pathspec 'dbhandler/ipch' did not match any files
index filter failed: git rm --cached dbhandler/ipch

[/EDIT]

Upvotes: 4

Views: 8372

Answers (1)

Hristo Venev
Hristo Venev

Reputation: 992

You already have the large files in a previous commit. Due to the way git works, all versions of all files must be stored in the repository. Your best option is to erase the files from history using git fiter-branch:

$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch dbhandler/ipch'

This will take all commits on the current branch and edit them, running

$ git rm --cached dbhandler/ipch
$ git commit --amend

on each. Then run

$ git push -f

as history has been rewritten. Note that this will interfere with other people working on these commits as the new commits, although with the same description, have nothing to do with the old ones (similar to git rebase).

Alternatively, the selected files can only be removed from some commits:

$ git filter-branch ... 0123abcd..HEAD

will run only on commits from 0123abcd to HEAD inclusive. If 0123abcd has not been pushed yet, a simple git push will succeed.

Upvotes: 9

Related Questions