TortoiseSVN Копия иностранного репозитория
Я читаю на Vendor Branches с подрывной деятельностью. Мне не очень комфортно с командной строкой Subversion, и я использую TortoiseSVN и Subclipse в качестве клиентов SVN на моем компьютере с Windows 7.
В документации Vendor Branches для subversion они обсуждают создание "внешней копии репозитория", но я не смог найти, как это сделать с TortoiseSVN. Когда я искал в Интернете, как это сделать с помощью TortoiseSVN, я нашел статьи, предлагающие использовать svn:externals
вместо. В документации для Vendor Branches не сказано использовать svn:externals
и вместо этого говорит использовать иностранную копию хранилища.
Кто-нибудь знает, как я могу сделать такую копию с TortoiseSVN? Если это невозможно, будет svn:externals
дать мне тот же результат?
РЕДАКТИРОВАТЬ:
Вот мой рабочий процесс:
- Я создал новую папку корневого уровня в моем хранилище под названием
vendor
, Это братtrunk
, - Я проверил
myrepo/vendor
в новую рабочую копию. - Я попытался слить
two different trees
используя TortoiseSVN изmyvendorrepo/trunk
вmyrepo/vendor
, Это вернуло ошибку, говорящую мне, чтоmyvendorrepo/trunk
должен быть в том же хранилище, что иmyrepo/vendor
,
В документации Отдела поставщиков конкретно говорится о foreign repository copy
, но это не представляется возможным с TortoiseSVN.
1 ответ
- "чужую копию репозитория" нельзя выполнить с помощью TortoiseSVN (или любого другого SVN-клиента, это задача / часть /) управления репозиторием). И это применимо только в том случае, если SVN-клиент не может получить доступ к исходному коду (совсем не имеет версий, хранится в SCM, чего SVN-клиент не понимает)
- Вы неправильно поняли и использовали "объединение двух 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
вариант: позже ствол и БИБЛИОТЕКА уже связаны