Как не дать Git репозиториям стать слишком большими - PullRequest
2 голосов
/ 03 ноября 2019

После нескольких недель коммитов размер файла .git моего хранилища кода Matlab достигает 1-1,5 ГБ. Как я могу держать под контролем размер реестра git?

В качестве передового опыта я уже делаю следующее:

  1. избегайте загромождать репозиторий огромным количествомфайлов, которые Matlab пишет во время моих симуляций, и это делается путем обновления файла .gitignore, чтобы избежать их фиксации / толкания

  2. избегать включения двоичных или офисных файлов, которые требуют огромных фиксаций с точки зренияколичество отредактированных строк

  3. периодически с использованием таких команд, как

    git reflog expire --all --expire=now
    git gc --prune=now --aggressive
    

    для очистки реестра

Что я думаю, что происходитв том, что каждый раз, когда matlab что-то имитирует и записывает много текстовых файлов или переменных .mat, git отслеживает все изменения. Дайте ему неделю, а объем репо превышает 1,5 ГБ.

Должен ли я просто сохранить в хранилище фактический "код" и не сохранять какие-либо переменные?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019
find .git -name pack-*.idx -exec git verify-pack -v {} +

перечислит содержимое всех пакетов и даст фактический размер, который каждая часть занимает в файлах пакетов. Чтобы связать их с именами, наиболее эффективным в целом, вероятно, является объединение,

join <(find .git -name pack-*.idx -exec git verify-pack -v {} + | sort) \
     <(git rev-list --all --objects | sort) \
| sort -nk4,4

поле после типа объекта (tree, blob, commit, вы после BLOB-объектов)полный размер результата в вашем рабочем дереве, четвертое поле - это размер, который его дельта принимает в пакете. Измените порядок, и вам будет легко сортировать по файлам, вот один, чтобы показать только файлы и соответствующие биты данных по файлам:

join <(git rev-list --all --objects | sort ) \
     <( find .git -name pack-*.idx -exec git verify-pack -v {} + \
        | awk '$2=="blob" { print $1,$3,$4 } ' \
        | sort) \
| sort -k2 -nk4
0 голосов
/ 03 ноября 2019

Вы можете разделить данные и код с помощью дерева файлов, например:

\ project

\ project / code / matlab_files.m

\ project / code /. git

\ project / data / matlab_data_files

Таким образом, вы не отправляете данные в github. Перед нажатием обязательно очистите переменные в Matlab. Это можно сделать, закрыв Matlab или выполнив команду «очистить все». Хотите сохранить данные? запишите его в папку / project / data.

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