Bitbucket: видалення папки з історії Git

Існує жорсткий ліміт у 2 Гб при розміщенні Git на Bitbucket - якщо це перевищено, у вас є лише доступ для читання до сховища. Наприклад, щоб запобігти цьому, наприклад, заднім числом вилучаєте великі папки чи файли зі своїх комітетів. Але також і в інших випадках (якщо дані доступу ввійшли в історію або node_modules знову прослизнули на головний майстер), вам доведеться ретроспективно маніпулювати історією Git всупереч її природі.


Про це Bitbucket написала детальну статтю . Щоб пройти все в одному випадку, спочатку створимо нове сховище:

чиста історія бітбукетів

Потім клонуємо сховище в порожню папку на локальній машині:

6ab7686fc508ce87c52b10bb5d01ee51

Тепер ми створюємо дві папки з файлами випадкового вмісту:

6ab7686fc508ce87c52b10bb5d01ee51

Зараз ми наполягаємо на майстрі:

6ab7686fc508ce87c52b10bb5d01ee51

Зараз ми майже досягли жорсткого ліміту в 2 Гб для Bitbucket:

чиста історія бітбукетів

Ми також можемо перевірити це локально (див. "Пакет розмірів"):

6ab7686fc508ce87c52b10bb5d01ee51

чиста історія бітбукетів

Завдання тепер - заднім числом видалити "foo" зі сховища, щоб зменшити вдвічі його розмір. Для цього ми спочатку редагуємо поточну HEAD і записуємо папку в gitignore:

6ab7686fc508ce87c52b10bb5d01ee51

Нарешті, ми видаляємо папку, використовуючи BFG Repo Cleaner (BFG вимагає поточного JRE в системі як системну вимогу):

6ab7686fc508ce87c52b10bb5d01ee51

Тепер результат ми бачимо локально:

6ab7686fc508ce87c52b10bb5d01ee51

чиста історія бітбукетів

Однак розмір сховища ще не змінився на Bitbucket, оскільки сміттєзбірник ще не виконаний віддалено, і бітбукет не виконує "git gc" з кожним натисканням:

чиста історія бітбукетів

Підтримка також підтверджує це:

чиста історія бітбукетів

Тому найкраще надіслати запит безпосередньо на support@bitbucket.org, щоб вручну запустити "git gc" у сховищі. Через короткий час це також зробила команда підтримки:

чиста історія бітбукетів

Якщо тепер "свіжо" перетягнути сховище на інший комп'ютер, на диску буде потрапляти лише 0,9 ГБ. Якщо у когось все ще доступна локальна версія 1,8 Гб, достатньо "git pull" з наступним "git gc".

Назад