Big Cheese wrote:А лазание на сервер (или еще куда по сети) за содержимым открываемых файлов / структурой каталогов - времени вроде как и не занимает? "Отсутствие update" я в данном случае вижу только в отсутствии явных update commands.
…
Даже если storage расположен локально, все равно такая модель вносит overhead на дополнительный data transfer
overhead присутствует, но не на data transfer, а на системные вызовы типа stat & open, так как при их выполнении ClearCase должен определить, к какой версии элемента этот запрос должен быть адресован и где она расположена «географически». После этого, скорость чтения/записи точно такая же, как у локальной NTFS/ufs/etc или удаленной SMB/NFS.
Разумеется, существует кэширование, в том числе и аттрибутов. Но это организовать существенно проще чем репликацию. Последняя тоже присутсвует в CC, в виде MultiSite. Но это, в основном, для географически распределенного development – какая бы толстая «кишка» не лежала между континентами, а round-trip time, все равно более 300-500 ms.
Явный update частенько проигрывает по простой причине. Допустим у вас есть директория “include” с кучей .h файлов. Во время работы/билда Вы обращаетесь только с f.h.
update-ить Вам прийдется все измененные файлы в директории, в то время как с MVFS будет зартрачено время на передачу (если таковая необходима) только f.h. После этого ее можно положить в cash и только проверять, не изменились ли аттрибуты – выбираемая версия/timestamp.
Big Cheese wrote:Спасибо, звучит интересно. А как быть с shared checkout? или CC это не поддерживает?
Что именно Вы имеете ввиду под shared checkout? Там есть концепция reserved/unreserved checkout. Reserved checkout создает placeholder под будущую версию в version tree, потому возможен только 1 reserved checkout/per-element-branch. Unreserved checkouts может быть сколько угодно, но Вам грозит merge, при check-in (что собственно, не проблема).
При наличии прав, более чем один девелопер может работать одновременно с обоими типами checkouts, т.к., как я уже упоминал, checked-out version «принадлежит» view, а view – сетевой ресурс. Если права на модификацию view/element имеет группа devapp1, то все члены этой группы могут стартовать это view одновременно и модифицировать все, что модифицируется.
Big Cheese wrote:"переход с следующей BASELINE" - имеется в виду переключение конфигурации на другую метку (label) / timestamp/ branch и т.п.? Если да - я бы сказал что необходимость для этого править конфиги - это явный перебор, если речь не идет о build machine. (я например часто переключаюсь между braches/labels - что теперь - постоянно править что-то?)
Геннадий уже ответил. Можно только добавить, что в случае dynamic (MVFS) view, даже большой проект не занимает существенного места на локальном диске (даже в случае с локальным view-storage).
Девелоперы, пришедшие с других систем в ClearCase, сначала усиленно модифицируют cofig_spec (матерясь при этом).
Потом приходят к устоявшейся практике – 1 view под конкретную потребность, т.е. разработка Rel_1.0, Rel_1.5, Rel_2.0, Rel_0.1_bugfix, Rel1.5_f_client_customization, etc. Они могут быть использованы в любое время, без предварительных updates, и т.п.
Любое view доступно (после старта – секундная операция. ClearCase стартует view_server процесс на хосте, где расположен view-storage /в случае с NAS это не совсем так)
в Windows – через диск M (это умолчание, которое можно изменить), как M:\view-name\path_in_repository
Так же можно «замапить» view на какой-либо диск Z, X, … и обаращаться к коду как Z:\path_in_repository, при этом view стартуется автоматически при логине. Я этого не делаю – букв жалко
В UNIX - через /view директорию (это тоже умолчание, которое можно изменить) в виде /view/view-name/path_in_repository.
В UNIX можно также, кроме startview делать setview – в этом случае делается изменение root directory и как репозиторий, так и локальные файлы доступны через ‘/path’, без упоминания имени view.
Много ресурсов view_server не отнимает - мы, обычно, удаляем принудительно только views, которые не использовались более 6-12 месяцев, если есть недостаток ресурсов.
Big Cheese wrote:проблема кривизны cumulative builds из-за криво прописаного makefile (в случае cleanup / full rebuild такой проблемы нет вообще) по-моему, не стоит сколь-нибудь остро. Идея реюзать объектные файлы тоже выглядит интересно, но по значимости стоит где-то рядом с семантиковскими фичами типа distributed compilation of C++ projects 5-7летней давности (сугубое IMHO)
Я бы послушал, что бы Вам сказали, например, в Cisco по поводу cleanup / full rebuild какой-нибудь версии IOS
На счет distributed builds – мне нравилось, но это было в UNIX. В виндах, возможно, это криво – там много что криво.
Удачи!