Проверка subversion: есть ли способ пропустить поддерево?
У меня есть репозиторий, содержащий множество каталогов и файлов. Для сборки с нуля мне нужно только подмножество дерева, начиная с корня. Некоторые ненужные поддеревья в глубине содержат огромные файлы, которые не нужны для создания нуля. Я играл с --depth empty
возможность извлекать только разреженное дерево, но это громоздко и задом наперед, потому что я получил большой белый список каталогов, который я хочу, вместо крошечного черного списка каталогов, который я не хочу. Подход с использованием белого списка еще более усложняется необходимостью отслеживать новые каталоги, которые могут понадобиться для создания нуля.
Есть ли способ выразить Checkout рекурсивно dir
но пропустить dir/foo/bar/baz
а также dir/frob/tweak
без прыжков через обручи? Что-то вроде -prune
предикат find(1)
?
1 ответ
Subversion предполагает, что вам нужно все дерево каталогов. Есть способ сделать редкие проверки, но это своего рода обруч, перепрыгивающий через механизм:
Сначала сделайте заказ и установите --depth
немедленно:
$ svn co --depth=immediates svn://localhost/myproject/trunk myproject-trunk
Это извлечет все файлы и каталоги сразу под корнем.
Затем вы можете использовать все виды магии сценариев оболочки для обновления с помощью --set-depth
пометьте только те каталоги, которые вы хотите:
$ shopt -s extglob #Needed on BASH, but not Kornshell
$ svn co --depth=immediates $REPO_URL
$ svn up --set-depth=infinity !(foo|frob)
Выше будет сделать проверку всех деревьев каталогов, кроме foo
а также frob
,
Вы могли бы сделать подобные вещи с find
тоже.
Проблема в том, что Subversion очень проста и была разработана таким образом. В других системах управления версиями, таких как Perforce и ClearCase, вы указываете, что вы хотите оформить, а в Perforce - как вы хотите получить его.
Однако для этого необходимо настроить представление, которое значительно усложняет использование этих систем контроля версий. Мне нравится Perforce. Это быстро и мощно, но разработчики ненавидели его из-за необходимости просмотра. Для них это добавило меру сложности, которая на самом деле не давала им особой выгоды. Им редко приходилось делать редкие проверки.
Если это общая проблема с вашим хранилищем Subversion, вы можете переосмыслить свой макет, чтобы сделать его более удобным. Это не слишком сложно в Subversion, так как весь репозиторий представляет собой просто дерево файлов, включая ветви и теги. Много раз мы решали отказаться от транка и заменить его конкретной веткой или переименовать и реструктурировать наш репозиторий, чтобы было легче работать с ним.
Просто не забудьте согласовать любую масштабную реструктуризацию с вашими разработчиками. Если вы переместите дерево каталогов, над которым они работали, они вдруг обнаружат, что не могут зафиксировать свои изменения (в большинстве случаев они могут выполнить svn switch --relocate
чтобы обойти эту проблему. Тем не менее, мой опыт показывает, что разработчики скорее проверяют свои вещи и начинают с чистой проверки.