TortoiseSVN Копия иностранного репозитория

Я читаю на Vendor Branches с подрывной деятельностью. Мне не очень комфортно с командной строкой Subversion, и я использую TortoiseSVN и Subclipse в качестве клиентов SVN на моем компьютере с Windows 7.

В документации Vendor Branches для subversion они обсуждают создание "внешней копии репозитория", но я не смог найти, как это сделать с TortoiseSVN. Когда я искал в Интернете, как это сделать с помощью TortoiseSVN, я нашел статьи, предлагающие использовать svn:externals вместо. В документации для Vendor Branches не сказано использовать svn:externals и вместо этого говорит использовать иностранную копию хранилища.

Кто-нибудь знает, как я могу сделать такую ​​копию с TortoiseSVN? Если это невозможно, будет svn:externals дать мне тот же результат?

РЕДАКТИРОВАТЬ:

Вот мой рабочий процесс:

  1. Я создал новую папку корневого уровня в моем хранилище под названием vendor, Это брат trunk,
  2. Я проверил myrepo/vendor в новую рабочую копию.
  3. Я попытался слить two different trees используя TortoiseSVN из myvendorrepo/trunk в myrepo/vendor, Это вернуло ошибку, говорящую мне, что myvendorrepo/trunk должен быть в том же хранилище, что и myrepo/vendor,

В документации Отдела поставщиков конкретно говорится о foreign repository copy, но это не представляется возможным с TortoiseSVN.

1 ответ

  1. "чужую копию репозитория" нельзя выполнить с помощью TortoiseSVN (или любого другого SVN-клиента, это задача / часть /) управления репозиторием). И это применимо только в том случае, если SVN-клиент не может получить доступ к исходному коду (совсем не имеет версий, хранится в SCM, чего SVN-клиент не понимает)
  2. Вы неправильно поняли и использовали "объединение двух URL" (читайте svn help merge) - этот тип слияния не используется в Vendor Branching, используется по-разному и для разных целей: svn merge URL1 URL2 слиться в WC независимых URL3 параллельных изменений от URL1 + URL2

"Иностранная копия" и ветвление внешнего поставщика в образце

Давайте представим:

  • Внешний код размещен в VENDOR/PATH/TO/LIBRARY
  • Наша копия вышестоящего кода - в MY/VENDORS/VENDOR/LIBRARY (дополнительный промежуточный узел /VENDORS - это заготовка для будущего, когда может появиться более 1 поставщика)
  • Местные работы происходят в MY/trunk

Стиль "Иностранная копия"

  • спросите у SVN-admin, у кого есть доступ к файловой системе репозитория, создайте дамп полного VENDOR хранилище с svnadmin dump и передать вам дамп, только после того, как он отфильтрует /PATH/TO/LIBRARY узел с svndumpfilter
    • другой способ использует svnrdump URL, что имеет некоторые преимущества: вы можете сбросить любой удаленный репозиторий, для которого у вас есть права на чтение, вы можете сбросить только часть репозитория (и устранить головную боль svndumpfilter) - svnrdump dump VENDOR/PATH/TO/LIBRARY > dumpfile
  • подготовленный (любым способом) дамп должен быть загружен в MY репозиторий: svnadmin load /PATH/TO/MY < dumpfile с некоторыми дополнениями:
    • потому что это дамп из другого репо, --ignore-uuid опция (в случае не пустого MY) не требуется, но может использоваться для безопасности
    • потому что мы хотим изменить точку монтирования каталога с /PATH/TO/LIBRARY в /VENDORS/VENDOR/LIBRARY дополнительная опция --parent-dir /VENDORS/VENDOR/ является обязательным (TBT!!! Я пишу родительские спецификации из памяти)

После этих операций у вас будет узел в вашем локальном репозитории, который является точной копией удаленного узла, но никак не связан с удалением: вам нужно отслеживать удаленные изменения и синхронизировать с вашей копией вручную (svn up VENDOR/PATH/TO/LIBRARY в отдельном WC, скопируйте изменения в свой WC, зафиксируйте изменения)

Экстерналии стиль

  • Создать физический узел /VENDORS/VENDOR/ в MY хранилище (svn mkdir --parents /VENDORS/VENDOR)
  • определите подкаталог LIBRARY для /VENDORS/VENDOR/ как внешние (с PEG-ревизией в URL или без нее, как вы предпочитаете - без нее будет проще поддерживать обновления / нулевую операцию /, но труднее / невозможно / восстановить старое, историческое состояние вашего хранилище, с PEG вы должны поддерживать актуальность ссылки вручную / редактировать PEG-ревизию, когда это необходимо /, но история сохраняется всегда правильно автоматически), сопоставленной с VENDOR/PATH/TO/LIBRARY

Для обоих стилей интеграция апстрима в ваш код будет просто периодическим слиянием /VENDORS/VENDOR/LIBRARY в транк

PS: для externals-syle первое создание начального снимка в стволе (в случае пустого ствола) и первое объединение со стволом может быть проблематичным и неочевидным. AFAICR, вы не сможете объединить /VENDORS/VENDOR/LIBRARY в пустой багажник (и svn copy также): вы получите (не могу вспомнить текст) ошибку и не слите | копию вообще. Не могу сослаться на правильный путь, но я просто копирую файлы в рабочей копии из ветви поставщика в транк и фиксирую транк для того, чтобы иметь BASE, и в этом случае при первом слиянии (и только первом) LIBRARY в транк, чтобы объединить несвязанные (для Subversion) добавить узлы --ignore-ancestry вариант: позже ствол и БИБЛИОТЕКА уже связаны

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