Передача двоичных файлов в SVN - PullRequest
9 голосов
/ 12 октября 2008

Я немного искал, но не нашел удовлетворительного ответа, поэтому я хотел бы услышать ваше мнение по этому поводу.

У меня есть пара инструментов, которые мне нужно время от времени обновлять и развертывать на нескольких серверах. Источник управляется в репозитории SVN.

Чтобы избавить себя от необходимости копировать двоичные файлы на рабочие серверы с помощью ftp или аналогичных средств (у меня нет средств для создания проектов на серверах), я думаю создать область в хранилище, чтобы зафиксировать их как Что ж. Затем я мог бы просто получить самую последнюю версию исполняемых файлов с сервера SVN всякий раз, когда они мне нужны.

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

--- trunk
    --- project1
    --- project2
--- built
    --- project1
    --- project2

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

--- tags/project1/release2/ 
         includes files from 
--- trunk/project1/ revision 487 and
--- built/project1/ revision 488 

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

Ответы [ 5 ]

9 голосов
/ 12 октября 2008

В вашей настройке нет ничего странного (я делаю одинаковые вещи как с инструментами сборки, так и с артефактами сборки, когда мне нужно сохранить точные биты.) Разметка, которую вы хотите, определенно возможна - «включать» определенные версии других веток или теги в ваших тегах / project1 / release2, все, что вам нужно сделать, это установить svn: внешние свойства для тегов / project1 / release2, ссылаясь на URL источников и ревизий, которые вы хотите получить, и вы ' переустановлен.

4 голосов
/ 12 октября 2008

Хотя я не могу прямо ответить на ваш вопрос, я расскажу об альтернативном подходе.

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

Мне показалось, что управлять этой настройкой проще, чем вводить двоичные файлы в SVN. Если вам нужен точный двоичный файл с определенной версией, он просто есть, при условии, что версия была передана клиенту (но тогда зачем вам двоичный файл, который никогда не видел солнечного света?).

2 голосов
/ 12 октября 2008

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

1 голос
/ 13 октября 2008

Хотя технически этот подход будет работать просто отлично, я лично не буду использовать SVN для хранения таких двоичных файлов.

У меня есть две причины, почему это так. Первоначально я думал, что SVN последовал за CVS и не хранил бинарные различия, в которых, как оказалось, я ошибался. В любом случае:

0) «Технически» вам не нужно хранить сгенерированные файлы, так как они могут быть восстановлены при необходимости. Очевидно, что это не практично в реальной жизни, но ИМХО вам все еще следует подумать «как я могу создать кеш для сгенерированного материала».
SVN не совсем подходит для этой модели использования. На самом деле это не само по себе, но то, что я пытаюсь донести, это то, что «размещение чего-либо в SVN означает, что вы заботитесь об этом и хотите заархивировать его» - если вы этого не сделаете, вы не должны передавать это ИМХО сообщение, неявно или иначе

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

2) SVN разработан, чтобы хранить все ваши файлы навсегда. Очень больно и отнимает много времени, чтобы полностью удалить вещи из хранилища , что делает сомнительным хранение вещей, которые вам не нужно хранить.

Я бы рекомендовал вместо этого просто использовать веб-сервер для хранения своих двоичных файлов. (SVN - это веб-сервер в конце концов **). Сохраните на сервере столько старых двоичных файлов, сколько захотите, и сохраните их, но затем вы можете удалить старые ненужные двоичные файлы, если они вам больше не нужны.

** Да, я знаю, что он использует DAV, и поэтому на самом деле это не просто старый веб-сервер, а с точки зрения развертывания на производственном компьютере процесс: «Я загружаю некоторые файлы, используя http из http://blah', так что это может быть так же.

0 голосов
/ 12 октября 2008

Не знаете, почему вы не хотите помещать двоичные файлы в дерево trunk / project1 / binaries? Тем не менее, ничто не должно помешать вам выглядеть так:

  • Ствол
    • project1
    • project2
  • встроенный
    • project1
    • project2
  • теги
    • project1
    • <tag id>
      • <code as usual>
      • двоичные файлы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...