мерзавец является очень очень медленным при отслеживании больших двоичных файлов

Моему проекту шесть месяцев, и мерзавец является очень очень медленным. Мы отслеживаем приблизительно 30 файлов, которые имеют размер 5 МБ к 50 МБ. Это - двоичные файлы, и мы сохраняем их в мерзавце. Я полагаю, что те файлы делают мерзавца медленным.

Есть ли способ уничтожить все файлы размера> 5 МБ из репозитория. Я знаю, что потерял бы все эти файлы, и это хорошо со мной.

Идеально я хотел бы команду, которая перечислит все большие файлы (> 5 МБ). Я вижу список, и затем я говорю хорошо, что разрешение и удаляет те файлы и делает мерзавца быстрее.

Я должен упомянуть, что мерзавец является медленным не только на моей машине, но и развертывание приложения при подготовке среды теперь занимает приблизительно 3 часа.

Таким образом, фиксация должна быть чем-то, что будет влиять на сервер и не только пользователей репозитория.

81
задан Simon East 3 February 2015 в 07:03
поделиться

6 ответов

Вот цензурированная версия, призванная быть менее негативной и подстрекательской:

У Git есть хорошо известная слабость, когда дело касается файлов, которые не являются построчными текстовыми файлами. В настоящее время нет решения, и основная команда git не объявила о планах по решению этой проблемы. Есть обходные пути, если ваш проект небольшой, скажем, 100 МБ или около того. Существуют ветки проекта git для решения этой проблемы масштабируемости, но в настоящее время эти ветки не являются зрелыми. Некоторые другие системы контроля версий не имеют этой конкретной проблемы. Вы должны рассматривать эту проблему как лишь один из многих факторов при принятии решения о выборе git в качестве системы контроля версий.

17
ответ дан 24 November 2019 в 09:27
поделиться

вы сказали git, что эти файлы являются двоичными?

например. добавлен двоичный файл *. ext в ваш репозиторий .gitattributes

4
ответ дан 24 November 2019 в 09:27
поделиться

Просто установите файлы, которые будут игнорироваться. См. Ссылку ниже:

http://help.github.com/git-ignore/

-2
ответ дан 24 November 2019 в 09:27
поделиться

Это потому, что git не масштабируется.

Это серьезное ограничение в git, которое игнорируется защитой git. Поищите в списках рассылки git, и вы обнаружите, что сотни пользователей задаются вопросом, почему всего лишь скудные 100 МБ изображений (скажем, для веб-сайта или приложения) ставят git на колени. Проблема, похоже, в том, что почти весь git полагается на оптимизацию, которую они называют «упаковкой». К сожалению, упаковка неэффективна для всех текстовых файлов, кроме самых маленьких (т. Е. Исходного кода). Хуже того, он становится все менее и менее эффективным по мере увеличения истории.

Это действительно досадный недостаток в git, который рекламируется как «быстрый» (несмотря на отсутствие доказательств), и разработчики git хорошо об этом знают. Почему не починили? В списке рассылки git вы найдете ответы от разработчиков git, которые не распознают проблему, потому что их документы Photoshop (* .psd) являются проприетарным форматом. Да, это действительно так плохо.

Вот результат:

Используйте git для крошечных проектов с исходным кодом, для которых вам не хочется создавать отдельное репо. Или для небольших проектов только с исходным кодом, где вы хотите воспользоваться моделью децентрализованной разработки git copy-the-all-repo. Или когда вы просто хотите изучить новый инструмент. Все это веские причины использовать git, и всегда интересно изучать новые инструменты.

Не используйте git, если у вас большая база кода, двоичные файлы, огромная история и т. Д. Только один из наших репозиториев - это TB. Git не может с этим справиться. VSS, CVS и SVN прекрасно справляются с этим. (Однако SVN раздувается.)

Кроме того, дайте git время для созревания. Он еще незрелый, но набирает обороты. Я думаю, что со временем практическая природа Линуса превзойдет пуристов OSS, и git, в конечном итоге, можно будет использовать в более широкой области.

-25
ответ дан 24 November 2019 в 09:27
поделиться

Вы собираете мусор?

git gc

Это существенно влияет на скорость даже для небольших репозиториев.

124
ответ дан 24 November 2019 в 09:27
поделиться

Объяснение

Git действительно хорош в огромных историях небольших текстовых файлов, потому что он может эффективно хранить их и их изменения. В то же время, git очень плохо работает с бинарными файлами, и будет наивно хранить отдельные копии файла (по умолчанию, по крайней мере). Репозиторий становится огромным, а затем становится медленным, как вы заметили.

Это общая проблема среди DVCS, усугубляемая тем, что вы загружаете каждую версию каждого файла ("весь репозиторий") при каждом клонировании. Ребята из Kiln работают над плагином для обработки этих больших файлов, более похожим на Subversion, который загружает исторические версии только по требованию.

Решение

Эта команда выведет список всех файлов в текущем каталоге размером >= 5MB.

find . -size +5000000c 2>/dev/null -exec ls -l {} \;

Если вы хотите удалить файлы из всей истории репозитория, вы можете использовать эту идею вместе с git filter-branch, чтобы пройтись по истории и избавиться от всех следов больших файлов. После этого все новые клоны репозитория будут более тощими. Если вы хотите уменьшить репозиторий без клонирования, вы найдёте инструкции на man-странице (см. "Контрольный список для уменьшения репозитория").

git filter-branch --index-filter \
    'find . -size +5000000c 2>/dev/null -exec git rm --cached --ignore-unmatch {} \;'

Слово предупреждения: это сделает ваше хранилище несовместимым с другими клонами, потому что в деревьях и индексах будут проверены разные файлы; вы больше не сможете выталкивать или извлекать из них.

77
ответ дан 24 November 2019 в 09:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: