Хранение сторонних библиотек в управлении версиями

Должны ли храниться библиотеки, которые приложение использует в исходном элементе управления? Одна часть меня говорит, что нужно, а другая часть - нет. Неправильно добавить библиотеку 20mb, которая затмевает все приложение только потому, что вы полагаетесь на пару функций (хотя и довольно сильно). Если вы просто храните jar/dll или, возможно, даже распределенный zip/tar проекта?

Что делают другие люди?

Ответ 1

Помимо наличия сторонних библиотек в вашем репозитории, стоит сделать это таким образом, чтобы упростить отслеживание и слияние будущих обновлений в библиотеке (например, исправления безопасности и т.д.). Если вы используете Subversion, используя подходящую ветку поставщика.

Если вы знаете, что было бы холодным днем ​​в аду, прежде чем вы будете модифицировать свой сторонний код, тогда (как сказал @Matt Sheppard) внешний смысл, и дает вам дополнительную выгоду, что становится очень легко переключитесь на последнюю версию библиотеки, если обновления безопасности или необходимая новая функция сделают это желательным.

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

@Stu Thompson упоминает хранимую документацию и т.д. в управлении версиями. В больших проектах я сохранил всю нашу папку "клиентов" в контроле источника, включая счета/счета/минуты собрания/технические спецификации и т.д. Весь матч по стрельбе. Хотя, гм, не забудьте сохранить их в репозитории SEPARATE, из которого вы будете доступны: другим разработчикам; клиент; ваш "источник просмотра браузера"... cough...:)

Ответ 2

сохраните все, что вам нужно, чтобы построить проект через 10 лет. Я храню весь почтовый дистрибутив любой библиотеки, на всякий случай

Изменить для 2017: Этот ответ не очень хорошо стартовал:-). Если вы все еще используете что-то старое, например, ant или make, это все еще применяется. Если вы используете что-то более современное, например maven или graddle (например, Nuget on.net), с управлением зависимостями, вы должны запустить сервер управления зависимостями в дополнение к вашему серверу управления версиями. Пока у вас есть хорошие резервные копии обоих, и ваш сервер управления зависимостями не удаляет старые зависимости, вы должны быть в порядке. Пример сервера управления зависимостями см., Например, Sonatype Nexus или JFrog Artifcatory, среди многих других.

Ответ 3

Не храните библиотеки; они не являются, строго говоря, частью вашего проекта и бесполезно занимают место в вашей системе контроля версий. Однако, используйте maven (или Ivy для ant builds), чтобы отслеживать, какие версии внешних библиотек используют ваш проект. Вы должны запустить зеркало репо внутри вашей организации (которое будет скопировано), чтобы гарантировать, что у вас всегда есть зависимости под вашим контролем. Это должно дать вам лучшее из обоих миров; внешние банки вне вашего проекта, но все еще надежно доступны и доступны по центру.

Ответ 4

Мы храним библиотеки в исходном элементе управления, потому что хотим построить проект, просто проверив исходный код и запустив конструкцию script. Если вы не можете получить последние и построить за один шаг, тогда вы столкнетесь с проблемами позже.

Ответ 5

никогда не храните ваши сторонние двоичные файлы в исходном элементе управления. Системы управления версиями - это платформы, которые поддерживают одновременное совместное использование файлов, параллельную работу, слияние усилий и историю изменений. Контроль источника не является FTP-сайтом для двоичных файлов. Сторонние сборки НЕ являются исходным кодом; они изменяются, возможно, дважды на SDLC. Желание очистить рабочее пространство от чистоты, вытащить все из системы управления версиями, а сборка не означает, что сторонние сборки должны застревать в исходном управлении. Вы можете использовать скрипты сборки для управления вытягиванием сторонних сборок с сервера распространения. Если вы беспокоитесь о том, чтобы контролировать, какая ветка/версия вашего приложения использует определенный сторонний компонент, вы также можете контролировать это с помощью скриптов сборки. Люди упоминали Maven для Java, и вы можете сделать что-то подобное с MSBuild для .Net.

Ответ 6

Я обычно храню их в репозитории, но я сочувствую вашему желанию сохранить размер.

Если вы не храните их в репозитории, вам абсолютно необходимо архивировать и версировать, и ваша система сборки должна знать, как их получить. Многие люди в мире Java, похоже, используют Maven для автоматической привязки зависимостей, но я не использовал I, поэтому я не могу рекомендовать для него или против него.

Одним из хороших вариантов может быть сохранение отдельного хранилища сторонних систем. Если вы работаете в Subversion, вы можете использовать поддержку внешних субверсий, чтобы автоматически проверять библиотеки из другого репозитория. В противном случае я бы предложил сохранить внутренний анонимный FTP (или аналогичный) сервер, с которого ваша система сборки может автоматически запрашивать требования. Очевидно, вы захотите, чтобы вы сохранили все старые версии библиотек, и все там было создано вместе с вашим репозиторием.

Ответ 7

То, что у меня есть, представляет собой репозиторий Maven, подобный интрасети, где хранятся все сторонние библиотеки (не только библиотеки, но и их соответствующее распределение источников с документацией, Javadoc и все такое). Причина в следующем:

  • зачем хранить файлы, которые не меняются в систему, специально предназначенную для управления файлами, которые меняются?
  • он резко затягивает выписки
  • каждый раз, когда я вижу "something.jar", хранящийся под контролем источника, я спрашиваю "и какая версия?"

Ответ 8

Я помещаю все, кроме JDK и IDE, в исходный элемент управления.

Философия Тони звучит. Не забывайте сценарии создания базы данных и сценарии обновления структуры данных. Прежде чем вики вышли, я даже хранили нашу документацию в исходном контроле.

Ответ 9

Мое предпочтение заключается в сохранении сторонних библиотек в репозитории зависимостей (Artifactory с Maven), а не сохранять их в Subversion.

Поскольку сторонние библиотеки не управляются или не управляются версиями, как исходный код, не имеет большого смысла смешивать их. Удаленные разработчики также считают, что не нужно загружать большие библиотеки по медленной ссылке WPN, когда они могут легко получить их из любого количества публичных репозиториев.

Ответ 10

На предыдущем работодателе мы сохранили все необходимое для создания приложения (ов) в исходном управлении. Спиннинг новой машины сборки был связан с синхронизацией с источником управления и установкой необходимого программного обеспечения.

Ответ 11

Храните сторонние библиотеки в исходном элементе управления, чтобы они были доступны, если вы проверили свой код на новую среду разработки. Любые команды "include" или build, которые могут иметься в скриптах сборки, также должны ссылаться на эти "локальные" копии.

Помимо обеспечения того, что сторонний код или библиотеки, на которые вы полагаетесь, всегда доступны для вас, это также означает, что код (почти) готов к созданию нового ПК или учетной записи пользователя, когда новые разработчики присоединяются к команде.

Ответ 12

Храните библиотеки! Репозиторий должен быть моментальным снимком того, что требуется для создания проекта в любой момент времени. Поскольку для проекта требуется другая версия внешних библиотек, вы захотите обновить/проверить новые версии этих библиотек. Таким образом, вы сможете получить всю нужную версию со старым снимком, если вам нужно исправить старую версию и т.д.

Ответ 13

Лично у меня есть папка зависимостей как часть моих проектов и храню ссылки на библиотеки там.

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

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

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

Ответ 14

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

Ответ 15

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

(и, как кто-то, кто испытал боль, пожалуйста, сохраните копию всего, что необходимо для того, чтобы установить элементы управления и работать на платформе dev. У меня когда-то был проект, который можно было бы создать, но без файла установки и ключей reg, вы не могли бы внести никаких изменений в внешний макет стороннего производителя. Это было весело переписывать)

Ответ 16

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

Ответ 17

Лично то, что я сделал и до сих пор любил результаты, - это библиотеки магазинов в отдельном репозитории, а затем ссылки на каждую библиотеку, которая мне нужна в других репозиториях, с использованием функции Subversion svn: externals. Это хорошо работает, потому что я могу хранить копии версий большинства наших библиотек (в основном управляемых сборников .NET) в исходном управлении без их увеличения объема нашего основного репозитория исходного кода. Наличие сборок, хранящихся в репозитории таким образом, делает так, чтобы сервер сборки не должен был устанавливать их для создания сборки. Я скажу, что получение сборки для успеха в отсутствие установленной Visual Studio было довольно сложной задачей, но теперь, когда мы получили ее работу, мы довольны ею.

Обратите внимание, что в настоящее время мы не используем многие коммерческие пакеты управления сторонних производителей или что-то вроде этого, поэтому мы не сталкиваемся с проблемами лицензирования, где может потребоваться фактически установить SDK на сервере сборки, но я могу см., где это может легко стать проблемой. К сожалению, у меня нет решения для этого и планирую обратиться к нему, когда я впервые на него нажму.