Как уменьшить репозиторий Git (изменить прошлые коммиты и добавить gitignore)?
Клонировал себе репозиторий сайта, в котором папка ".git" весит около 500 мегабайт, хотя сами файлы из рабочего каталога буквально 50 мегабайт. При изучении почему так, понял, что где-то в начальных коммитах потерялся файл ".gitignore" и в коммит попала папка "Media" с изображениями (картинки товаров в интернет магазине). Затем прошло еще несколько коммитов, в которых изменял код сайта (php, html, css), а также внутри папки Media происходили изменения (добавлялись новые картинки, изменялись размеры предыдущих картинок) и Git все это запоминал. Потом файл ".gitignore" вернули, а также добавили папку Media с картинками в исключения. Но размер папки ".git" стал уже 500 мегабайт. =((( Теперь каждый, кто клонирует себе репозиторий вынужден тащить такой груз.
Что я хочу (если такое возможно). У меня есть нормально настроенный файл ".gitignore" и я бы хотел, чтобы git забыл об любых упоминаниях всех файлов указанных в ".gitignore" из этих коммитов.
Мол был коммит, в котором добавлялось, допустим, два нужных файлах и какие-то изменения из папки "Media". А станет коммит, в котором просто добавлялось только два нужных файла и все.
Я мечтал, а может можно мой нормальный файл ".gitignore" пропихнуть в каждый коммит, и чтобы гит заново пересмотрел каждый свой коммит с учетом обновленного файла ".gitignore"?
К сожалению, вариант просто пересоздать репозиторий с нормальным ".gitignore" не подходит, т. к. мне нужна история изменения сайта. Т. е. история правкой php, html и css-файлов.
И еще, если у меня все-же получится переписать историю коммитов, то я потом смогу на bitbacket сохранить свою историю?
а именно раздел "Removing Objects". На тестовом репозитории у меня все получилось. Правда я делал точь в точь по инструкции. А у них заранее известно имя файла, или его можно определить отсортировав по размеру. Из их инструкции:
эта строка удалит git.tgz из каждого коммита, а мне надо из каждого коммита удалить файлы, подходящие по правилам из файла gitignore, например как-то так:
мол вместо конкретного имени git.tgz я хочу подсунуть файл с паттернами, но увы ничего не работает. Может двойные кавычки надо экранировать? Но я пробовал просто вбить
git ls-files -i --exclude-from=.gitignore
и ls-files ничего мне не возращает, мол опция "--exclude-from" ничего не значит