Объединение изменений из двух SVN-репозиториев

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

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

Каков хороший подход к управлению версиями, так что я могу сохранить и записать свой собственный код в свой собственный SVN (SVN2), при этом получая обновления от SVN с открытым исходным кодом?

Я делаю все это из Eclipse, так что решение, которое может быть сделано с помощью инструмента Eclipse SVN (Subclipse), приветствуется.

1 ответ

Решение

Похоже, вы ищете Vendor Branches.

Как описано в разделе "Ветви поставщиков" в SVNBook, вы можете сделать следующее:

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

  1. Выполните первоначальный импорт с помощью svn import в ваш репозиторий <repo-URL>/vendor/current

  2. svn copy <repo-URL>/vendor/current в <repo-URL>/vendor/1.0 для того, чтобы создать тег, например. (1.0 здесь соответствует версии проекта с открытым исходным кодом, вы можете использовать любое имя или номер версии в вашем реальном случае).

  3. svn copy<repo-URL>/vendor/1.0 в вашу ветку разработки в хранилище, например <repo-URL>/project1/trunk,

  4. svn checkout<repo-URL>/project1/trunk в ту же директорию в локальной системе, которую вы импортировали изначально.

  5. Теперь вы можете изменить данные, хранящиеся в рабочей копии, и зафиксировать их в проекте.

  6. Если через некоторое время вы захотите обновить проект с открытым исходным кодом до более новой версии (например, для разработчиков ОС версии 1.1) с сохранением изменений, вам следует svn checkout <repo-URL>/vendor/current поверх неверсионной папки, содержащей версию 1.1 проекта ОС. Вы будете обязаны svn add а также svn remove файлы, которые изменили свое местоположение между 1.0 и 1.1 версией. Таким образом, вы получите рабочую копию, содержащую версию 1.1, которую вы обязуетесь <repo-URL>/vendor/current, Таким образом, вы фиксируете только изменения между 1.0 и 1.1 версией. Позже вы можете svn copy <repo-URL>/vendor/current в <repo-URL>/vendor/1.1 создать тег для него.

  7. Если вы хотите обновить проект ОС в своей ветке разработки до версии 1.1, сохраняя ваши изменения, вы можете выполнить слияние по 2 URL с рабочей копией, содержащей измененные данные проекта, командная строка будет выглядеть следующим образом:

    svn merge "<repo-URL>/vendor/1.0" "<repo-URL>/vendor/1.1" "<path-to-WC>"

Вышеприведенное описание не описывает изменения макета файла, сделанные между версиями ОС версии 1.0 и 1.1, и вам придется обрабатывать их вручную. Если вы хотите автоматизировать задачу добавления / удаления файлов, вы можете использовать svn_load_dirs.pl Perl-скрипт (или аналогичный Python-скрипт) для этой задачи. Сценарий доступен по адресу http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn_load_dirs/ и также описан в SVNBook 1.7.

Другие вопросы по тегам