Bitbucket: удалить папку из истории Git

При размещении Git на Bitbucket существует жесткое ограничение в 2 ГБ - если оно превышено, у вас будет доступ только для чтения к репозиторию. Чтобы предотвратить это, например, вы можете ретроспективно удалить большие папки или файлы из своих коммитов. Но также и в других случаях (если данные доступа вошли в историю или node_modules вернулись к мастеру) вам придется ретроспективно манипулировать историей Git, вопреки его природе.


Bitbucket написал об этом подробную статью . Чтобы выполнить все действия по кейсу, мы сначала создаем новый репозиторий.:

история битбакета чистая

Затем мы клонируем репозиторий в пустую папку на локальном компьютере.:

6ab7686fc508ce87c52b10bb5d01ee51

Теперь создаем две подпапки с файлами случайного содержания.:

6ab7686fc508ce87c52b10bb5d01ee51

Мы сейчас подталкиваем к хозяину:

6ab7686fc508ce87c52b10bb5d01ee51

Теперь мы почти достигли жесткого лимита в 2 ГБ на Bitbucket.:

история битбакета чистая

Мы также можем проверить это локально (см. «Размерный пакет»).:

6ab7686fc508ce87c52b10bb5d01ee51

история битбакета чистая

Теперь задача состоит в том, чтобы задним числом удалить "foo" из репозитория, чтобы уменьшить его размер вдвое. Для этого сначала редактируем текущий HEAD и записываем папку в gitignore:

6ab7686fc508ce87c52b10bb5d01ee51

Наконец, мы удаляем папку с помощью BFG Repo Cleaner (BFG требует наличия текущей JRE в системе в качестве системного требования):

6ab7686fc508ce87c52b10bb5d01ee51

Теперь мы можем увидеть результат локально:

6ab7686fc508ce87c52b10bb5d01ee51

история битбакета чистая

Но на Bitbucket размер репозитория еще не изменился, потому что сборщик мусора еще не был запущен удаленно и bitbucket не выполняет «git gc» при каждом нажатии.:

история битбакета чистая

Это также подтверждается поддержкой:

история битбакета чистая

Поэтому лучше всего отправить запрос напрямую на support@bitbucket.org, чтобы вручную запустить «git gc» в репозитории. Спустя короткое время это также сделала служба поддержки.:

история битбакета чистая

Если вы «заново» переместите репозиторий на другой компьютер, на диске останется только 0,9 ГБ. Если у кого-то есть версия 1,8 ГБ, доступная локально, достаточно «git pull», за которым следует «git gc».

Назад