инициализатор скобки или равный в союзах

В принципе, это сводится к компромиссам.

В одном из ваших вопросов есть пример самого Линуса:

[...] CVS, т.е. он действительно заканчивается в значительной степени ориентированный на модель «один файл за раз».

Что приятно в том, что у вас может быть миллион файлов, а потом только проверить несколько из них - вы даже не сможете см. влияние других 999,995 файлов.

Git принципиально никогда не смотрит на меньшее, чем весь репо. Даже если вы немного ограничиваете (т.е. проверяете только часть или возвращаете историю немного), git заканчивается, все еще всегда заботясь обо всем, и неся знания вокруг.

Так что git весит очень плохо, если вы заставляете его смотреть на все как на один огромный репозиторий. Я не думаю, что эта часть действительно исправлена, хотя мы, вероятно, можем ее улучшить.

И да, тогда есть проблемы с «большим файлом». Я действительно не знаю, что делать с огромными файлами.

Так же, как вы не найдете структуру данных с доступом и вставкой O (1), вы не найдете трекер контента, который делает все фантастически.

Гит сознательно выбрал лучшее в некоторых вещах, в ущерб другим.


Использование диска

Поскольку Git - это DVCS (

У этого есть некоторая действительно Хорошие преимущества, поэтому DVCS, такие как Git, стали безумно популярными.

Однако репозиторий с 4 ТБ на центральном сервере с SVN или CVS управляем, тогда как если вы используете Git, все не будут в восторге с переносом этого.

Git имеет отличные механизмы для минимизации размера вашего репо, создавая дельта-цепочки («diffs») через файлы. Git не ограничивается путями или фиксирует заказы при их создании, и они действительно работают очень хорошо ... вроде как gzipping всего репо.

Git помещает все эти небольшие различия в packfiles. Цепочки Delta и packfiles заставляют извлекать объекты на некоторое время, но это очень эффективно для минимизации использования диска. (Есть снова эти компромиссы.)

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


История

Когда вы регистрируетесь в файле, вы имеете его навсегда и всегда. Ваши внуки внуков внуков будут загружать ваш кот gif каждый раз, когда они клонируют ваше репо.

Это, конечно, не уникально для git, поскольку DCVS делает последствия более значительными.

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


Сложность

Работа с действительно большими файлами требует много тщательной работы, чтобы убедиться, что вы минимизируете свои операции и никогда не загружаете все это в память. Это очень сложно сделать надежно при создании программы с таким сложным набором функций, как git.


Заключение

В конечном счете разработчики, которые говорят «не ставьте большие файлы в Git "немного похожи на тех, кто говорит« не помещайте большие файлы в базы данных ». Им это не нравится, но любые альтернативы имеют недостатки (Git intergration в одном случае, соответствие ACID и FKs с другим). В действительности, он обычно работает нормально, особенно если у вас достаточно памяти.

Он просто не работает, как и с тем, для чего он был предназначен.

21
задан Community 23 May 2017 в 12:22
поделиться