Лучшая практика для хранения файлов .jar в VCS (SVN, Git, ...) - PullRequest
19 голосов
/ 25 июля 2010

Я знаю, что во времена Maven не рекомендуется хранить библиотеки в VCS, но иногда это имеет смысл, однако.

Мой вопрос: как их лучше хранить - сжатые или несжатые?Несжатые они больше, но если их заменить пару раз более новыми, то, возможно, сохраненная разница между двумя несжатыми .jar-файлами может быть намного меньше, чем разница сжатых.Кто-то делал какие-то тесты?

Ответы [ 3 ]

23 голосов
/ 25 июля 2010

Лучшая практика для хранения файлов .jar в VCS (SVN, Git,…): нет.

Это может иметь смысл в CVCS (централизованной VCS), такой как SVN, которая может обрабатывать миллионы файловнезависимо от их размера.

Это не в DVCS, особенно такой, как Git (и его ограничения ):

  • Двоичные файлы donне подходит для VCS .
  • По умолчанию клонирование репозитория DVCS даст вам все его истории со всеми версиями jar.
    Это будет медленнои занимают много места на диске, независимо от того, насколько хорошо сжаты эти банки.
    Вы можете попробовать поиграть с мелким клонированием , но это крайне непрактично.

Использованиевторой репозиторий, такой как Nexus , для хранения этих банок и ссылки только на файл txt (или pom.xml файл для Maven проекта) для получения правильных версий jar.
Репозиторий артефактов более приспособлен для распределения и выпуска релиза .


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

Однако во многих потоках упоминается возможность хранить банку в несжатом формате :

Я использую некоторые репозитории, в которых проверяются обычные архивы по 50 МБ.
Я убедил их не сжимать тарболы, и git делает довольно приличную работу, выполняя дельта-сжатие между ними (хотя для этого требуется довольно много оперативной памяти).

У вас естьподробнее о обособленном объекте на Git здесь :

  • Не имеет значения, если вы имеете дело с двоичным или текстовым;
  • Дельтане обязательно против• тот же путь в предыдущей ревизии, так что даже новый файл, добавленный в историю, может быть сохранен в разделенной форме;
  • Когда используется объект, сохраненный в разделенном представлении, это повлечет за собой большие затраты, чем использованиетот же объект в сжатом базовом представлении.Механизм делитирования делает компромисс, принимая во внимание эту стоимость, а также эффективность использования пространства.

Таким образом, если клоны и извлечения не являются общими операциями, вам придется выполнять все5 минут, хранение jar в несжатом формате в Git будет иметь больше смысла, потому что:

  • Git будет сжимать / вычислять дельту для этих файлов
  • В результате вы получите несжатый jarрабочий каталог, файлы которого затем могут быть загружены быстрее.

Рекомендация: несжатый .

4 голосов
/ 26 июля 2010

Вы можете использовать решение, аналогичное найденному в ответах на "Разархивировать файлы OpenOffice для лучшего хранения в управлении версиями" здесь, на SO, а именно, используя clean / smudge gitattribute с использованием rezip в качестве фильтра для хранения *.jar файлов без сжатия.

2 голосов
/ 25 июля 2010

.jar файлы уже (могут быть) сжаты, сжатие во второй раз, вероятно, не даст ожидаемого улучшения размера.

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