SVN: ветки поставщиков + исправления + история?

У нас есть довольно большая библиотека, которую нам нужно периодически импортировать (а затем патчить) в нашу кодовую базу.

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

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

Итак, мой вопрос:

Есть ли способ иметь исправленную «ветвь поставщика», которая также каким-то образом сохраняет доступ к истории файлов поставщиков?

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

Какой правильный маршрут выбрать здесь? (FWIW, поставщик выпускает раз в месяц. Мы намерены выпускать обновления примерно раз/два в год.)

Спасибо


person nonot1    schedule 01.12.2010    source источник
comment
Это не тот ответ, которого вы ожидали, но (хотя мне очень нравится svn), если вы планируете интенсивно работать с ветками, то SVN может быть для вас не очень хорошим решением. Вместо SVN я предлагаю вам взглянуть на Mercurial или GIT Mercurial проще, я использую его для своих частных проектов, а GIT мощнее.   -  person zerkms    schedule 01.12.2010
comment
@zerkms Да, SVN, к сожалению, является бизнес-требованием. Нет выбора в этом вопросе.   -  person nonot1    schedule 01.12.2010
comment
@zerkms, ветвление отлично работает в Subversion. Вам просто нужно знать, как использовать инструменты, и хорошо разбираться в методах и методологиях контроля версий.   -  person jgifford25    schedule 01.12.2010


Ответы (1)


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

Теперь, предполагая, что вы не помещаете исходный каталог поставщика в свой источник (это означает, что вы создаете два проекта отдельно), у вас есть несколько вариантов, если вы храните два источника в отдельных репозиториях.

Если вам нужен источник поставщиков вместе с историей, вы можете настроить svnsync для репозитория поставщиков и получать их изменения через регулярные промежутки времени. Svnsync — это прекрасный способ удаленно получить локальную копию чего-либо с полным набором истории. Но одно предостережение относительно svnsync заключается в том, что репозиторий становится доступным только для чтения. Таким образом, вы не можете применить патч к их источнику.

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

Другим вариантом было бы, если бы поставщик сделал дамп своего репо и отправил его вам. Затем вы загрузите этот дамп в свой собственный репозиторий и выполните чтение/запись.

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

Теперь, если вам нужно, чтобы их источник был в вашем источнике, по-прежнему делайте то же самое, но используйте svn:external, как вы отметили в своем вопросе. Вам по-прежнему потребуется применить любые исправления, которые необходимо внести в исходный код поставщика, к вашей копии репозитория поставщика.

person jgifford25    schedule 01.12.2010
comment
Можете ли вы уточнить, что вы имели в виду под svn:externals? Могу ли я поддерживать пропатченную ветку в собственном репо на основе svn:external? - person nonot1; 02.12.2010
comment
Разъяснение использования svn:externals: у вас будет исходный код поставщика в его собственном репозитории вместе с вашими конкретными исправлениями для исходного кода поставщика. Если ваш проект (в своем собственном репозитории) также компилирует пропатченный исходный код поставщика вместе со своим собственным исходным кодом, использование svn:externals будет лучшим решением для этого. Это связано с тем, что вы указали, что периодически загружаете более новые версии исходного кода поставщиков. Это позволит вам легче заменить источник поставщика. - person jgifford25; 02.12.2010
comment
@nonot1: я бы не стал рассматривать источник поставщика как ветку, а как отдельный проект, хранящийся в собственном репозитории. Это упростит автоматизацию обновления источника поставщика. Но наличие исходного кода поставщика в отдельном репозитории эффективно действует как ветка, к которой вы можете применять свои собственные исправления. Оттуда вы можете использовать svn:externals, чтобы включить его в исходный код вашего проекта (при необходимости). - person jgifford25; 02.12.2010