IDE, VCS и прочее
Модератор: Модераторы разделов
alex925
Сообщения: 5
ОС: Debian
Сообщение
alex925 » 26.01.2016 20:25
Хочу удалить из всех коммитов большую папку. Пытался это сделать с помощью команд:
Код: Выделить всё
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch bin' --prune-empty --tag-name-filter cat -- --all
rm -rf .git/refs/original && git gc --aggressive
Из истории изменений в коммитах папка исчезает, а размер папки с проектом не изменяется. Подскажите, что не так и как решить мою задачу?
Bizdelnick
Модератор
Сообщения: 21027
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 26.01.2016 20:47
Попробуйте git gc --prune=all .
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
alex925
Сообщения: 5
ОС: Debian
Сообщение
alex925 » 26.01.2016 21:23
Bizdelnick писал(а): ↑ 26.01.2016 20:47
Попробуйте
git gc --prune=all .
Не помогает, размер папки остался тот же
Выхлоп получил, вот такой:
MacBook-Air-Aleksej:vk-downloader alex$ git gc --prune=all
Counting objects: 164, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (76/76), done.
Writing objects: 100% (164/164), done.
Total 164 (delta 81), reused 164 (delta 81)
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 27.01.2016 00:37
alex925 писал(а): ↑ 26.01.2016 20:25
а размер папки с проектом не изменяется.
А если сделать `git clone old-project-dir new-project-dir`? new-project-dir - такого же размера?
/dev/random
Администратор
Сообщения: 5372
ОС: Gentoo
Сообщение
/dev/random » 27.01.2016 04:23
Полагаю, старая ветка осталась в рефлоге.
alex925
Сообщения: 5
ОС: Debian
Сообщение
alex925 » 27.01.2016 12:04
serzh-z писал(а): ↑ 27.01.2016 00:37
alex925 писал(а): ↑ 26.01.2016 20:25
а размер папки с проектом не изменяется.
А если сделать `git clone old-project-dir new-project-dir`? new-project-dir - такого же размера?
Проект такого же размера остается
/dev/random писал(а): ↑ 27.01.2016 04:23
Полагаю, старая ветка осталась в рефлоге.
И что делать с этим? Папку .git/refs/original вроде удаляю же
Bizdelnick
Модератор
Сообщения: 21027
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 27.01.2016 13:28
Я в таких случаях всегда использовал --tree-filter и с подобными проблемами не сталкивался.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 27.01.2016 15:48
alex925 писал(а): ↑ 27.01.2016 12:04
И что делать с этим? Папку .git/refs/original вроде удаляю же
Что в выводе `git for-each-ref refs/original`?
alex925
Сообщения: 5
ОС: Debian
Сообщение
alex925 » 27.01.2016 17:36
serzh-z писал(а): ↑ 27.01.2016 15:48
Что в выводе `git for-each-ref refs/original`?
Ничего
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 27.01.2016 17:39
alex925 писал(а): ↑ 27.01.2016 17:36
Ничего
Если уже ничего, то `git reflog expire --expire=now --all && git gc --prune=now` должно помочь.
alex925
Сообщения: 5
ОС: Debian
Сообщение
alex925 » 27.01.2016 18:57
serzh-z писал(а): ↑ 27.01.2016 17:39
Если уже ничего, то `git reflog expire --expire=now --all && git gc --prune=now` должно помочь.
Вот это помогло, благодарствую) А можете пояснить, что эта команда делает?
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 29.01.2016 14:08
alex925 писал(а): ↑ 27.01.2016 18:57
А можете пояснить, что эта команда делает?
Помечает записи в reflog (которые, в том числе, ссылались на удаленные блобы) устаревшими и запускает сборщик мусора.
В принципе, push так же должен был бы помочь избавится от рефлога и, как результат, бесхозных блобов. Или - `git clone ...` и последующий `git gc`. reflog не копируется при клонировании или push.