Удаление коммитов, размер которых (на диске) больше заданного значения - PullRequest
3 голосов
/ 24 мая 2019

После прочтения:

Как удалить слишком большой файл в коммите, когда моя ветвь опережает мастер на 5 коммитов

https://help.github.com/en/articles/working-with-large-files

https://rtyley.github.io/bfg-repo-cleaner/

https://help.github.com/en/articles/removing-sensitive-data-from-a-repository

Показать размер коммита в git log

Git - получить все созданные им коммиты и капли

Мне не удалось найти элегантное решение для удаления коммитов, которые превышают заданный размер (на диске). Эти коммиты не обязательно имеют большие файлы, но сами по себе большие (имеют много ~ 200 КБ зависимостей).

Как удалить такие коммиты из хранилища?

1 Ответ

1 голос
/ 04 июня 2019

Первая нота:

git сжимает файлы, когда сохраняет их в своей структуре .git/, и пытается сохранить похожие файлы, используя только их различия;

в этом смысле трудно определить, «какой коммит занимает больше места в моей папке .git/».


Если вы хотите измерить, сколько места занимают файлы в коммите при извлечении:

git ls-tree -r -l <commitid>

перечислит файлы вместе с их индивидуальными размерами

git ls-tree -r -l <commitid> | awk '{ sum += $4 } END { print sum }'

напечатает общий размер этих файлов.


Вы можете поместить вышеупомянутый ярлык в скрипт и посмотреть, что коммиты занимают более xx байт, следующее: вы можете избавиться от этих коммитов?

Вы можете указать git удалить конец ветки:

If all 'B's mark 'big commits' :

               +-- create a new branch here
               v
*--*--*--*--*--*--B--B--B--B <- branchA
    \              \
     \              \-B--B <- branchB
      \
       *--*--*--* <- branchC
              \
               \--B <- branchD

На приведенной выше диаграмме вы можете сказать git забыть branchA, branchB и branchD (и, возможно, создать новую ссылку, чтобы сохранить первые коммиты "не такие большие"),

но когда коммит появляется в середине ветки:

*--*--B--B--*--* <- branchE

Ваше понятие «удалить два B» сильно зависит от того, что хранится в вашем репо git, и от того, как вы можете удалить эти коммиты из истории ветки.

Общий совет: не удаляйте коммиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...