Проверка 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 чтобы обойти эту проблему. Тем не менее, мой опыт показывает, что разработчики скорее проверяют свои вещи и начинают с чистой проверки.

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