Ответ 1
Основные концепции
-
централизованный (-реплицированный) VCS: ClearCase находится на полпути между централизованным миром VCS (одним или несколькими "централизованными" репозиториями или базовыми объектами VOBS - каждый разработчик должен получить доступ к фиксации) и распределенный мир VCS.
Но он также поддерживает "реплицированный" режим, позволяющий реплицировать репо на удаленном сайте (MultiSite ClearCase), отправлять дельтам и управлять собственностью. (лицензионные сборы при этом довольно крутые, хотя)
Это не настоящая "децентрализованная" модель, поскольку она не допускает параллельных параллельных эволюций: ветки освоены в одном VOB или другом; вы можете только зарегистрировать главный VOB для ветвей, освоенных там, хотя у вас есть только доступ к любой ветке на любой реплике. -
хранилище линейных версий: каждый файл и каталог имеют линейную историю; между ними нет прямых отношений, таких как DAG VCS (Directed Acyclic Graph), где история файла связана с одной из связанных с каталогом к фиксации.
Это означает- когда вы сравниваете две коммиты, вам нужно сравнить список всех файлов и каталогов, чтобы найти дельта, поскольку коммиты не являются атомарными для файлов или каталогов, то есть нет единого имени для всех изменений во всех файлах, которые составляют логическую дельта.
-
Это также означает, что merge должен найти общий базовый вкладчик (не всегда такой же, как обычный предок), через исследование истории (см. следующий пункт).
(Git находится на противоположном конце этого спектра, будучи как децентрализованными, так и DAG-ориентированными:
- если node его графа имеет тот же "id", что и node другого коммита, он не нуждается в дальнейшем изучении: все субграфы гарантированно будут идентичны
- объединение двух ветвей на самом деле является слиянием содержимого двух узлов в DAG: рекурсивным и очень быстрым для нахождения общего предка)
-
3-way merging: чтобы объединить две версии, ClearCase должна найти общего основателя в своей линейной истории, которая может быть довольно длинный для сложного дерева версий (ветвь/суб-ветвь/суб-суб/ветвь,...) и базовый ClearCase merge объединяет файл или каталог, но не рекурсивный. Это касается только одного файла или одного каталога без его файлов (
ct findmerge
является рекурсивным) -
файл-ориентированный (в отличие от других недавних VCS больше репозитория): это означает, что фиксация является файлом по файлу, а не "набором измененных файлов": транзакция находится в уровень файла. Копирование нескольких файлов не является атомарным. (Почти каждый другой современный инструмент - это "центр репозитория", с транзакцией с атомарным фиксацией, но системы первого поколения, такие как RCS, SCCS, CVS и большинство других старых систем, не имеют этой функции.)
-
id-managed: каждый файл и каталог имеют уникальный идентификатор, что означает, что они могут быть переименованы по желанию: их история не изменится, так как идентификатор остается для "элемента". Кроме того, каталог обнаруживает в своей истории любое добавление/подавление файла. Когда файл "удален" (
rmname
), он этого не знает: только каталог уведомляется и создает новую версию в своей истории со списком подэлементов, не считая удаляемого файла.
(Создайте два файла с одинаковым размером и содержимым, они получат одинаковый идентификатор в Git - SHA1-ключ - и будут сохраняться только один раз в репозитории Git! Не так в ClearCase. < ш > Кроме того, если два файла с одним и тем же путем и именем создаются в двух разных ветвях, их идентификатор отличается друг от друга, эти два файла никогда не будут объединены: их называют "злыми близнецами" )
-
ветки являются первоклассными гражданами: большинство VCS рассматривают ветку и тег как одно и то же: одна точка в истории, из которой может развиваться новая линейная история (ветвь) или от того, где прикреплено описание (тег).
Не так для ClearCase, где ветка - это способ ссылки на номер версии. Любой номер версии начинается с 0 (только с ссылкой в ClearCase) до 1, 2, 3 и т.д. Каждая ветвь может содержать новый список номеров версий (0, 1, 2, 3).
Это отличается от других систем, где номер версии уникален и всегда растет (например, ревизии в SVN) или просто уникален (например, клавиши SHA1 в Git). -
доступ к контенту: для доступа к определенной версии файла/каталога вам необходимо знать его расширенный путь (состоящий из ветвей и версий). Он называется "расширенным именем пути":
[email protected]@/main/subBranch/Version
.
(Git ссылается на все через id-SHA1-based -: version [или commit], дерево [или версию каталога] и blob [или версию файла, или, скорее, содержимое файл]. Таким образом, это "id-accessed" или "id-referenced".
Для ClearCase идентификатор ссылается на "элемент": каталог или файл, независимо от его версии.)
-
как пессимистическая блокировка, так и оптимистичная блокировка: (зарезервированные или незарезервированные проверки в ClearCase): даже пессимистическая блокировка (зарезервированная проверка) не является истинной пессимистической, поскольку другие пользователи все равно могут проверить этот файл (хотя и в режиме "unreserved mode" ): они могут его изменить, но придется дождаться, когда первый пользователь зафиксирует свой файл (checkin) или отменит запрос. Затем они сольют свою версию проверки того же файла.
(Примечание: "зарезервированное" чек может освободить его блокировку и быть освобожденным либо владельцем, либо администратором). -
дешевое ветвление: ветка не вызывает копирование всех файлов. Это фактически ничего не запускает: любой файл без проверки останется в исходной ветки. Только измененные файлы будут иметь свои новые версии, сохраненные в объявленной ветке.
-
плоское хранилище: VOB хранятся в проприетарном формате с простыми файлами. Это не база данных с легким языком запросов.
-
доступ к локальной или сетевой рабочей области:
- Локальное рабочее пространство осуществляется через проверку на жесткий диск ( "обновление" моментального снимка). Рабочее пространство
- осуществляется через динамическое представление, объединяющее файлы с версиями и каталогами через сеть (без локальной копии, мгновенного доступа) и локальные файлы (те, которые выгружены или частные файлы). Комбинация удаленных (версий) и локальных (частных) файлов позволяет динамическому представлению появляться как классический жесткий диск (тогда как фактически любой записанный файл сохраняется в соответствующем хранилище представлений).
-
централизованное депортированное хранилище: [view] хранилище для хранения некоторых данных и предотвращения некоторых или любых сообщений с центральной ссылкой.
рабочее пространство может иметь:- разбросанное хранилище: как и подкаталоги
.svn
по всему месту - централизованное хранилище: как и хранилище представлений в ClearCase, они содержат информацию о файлах, отображаемых в представлении, и это хранилище уникально для представления.
- депортированное хранилище: хранилище не является частью самого представления/рабочей области, но может быть расположено в другом месте на компьютере или даже снаружи в LAN/WAN
- разбросанное хранилище: как и подкаталоги
(Git не имеет "хранилища" как такового. Его .git
- это фактически весь репозиторий!)
- ориентированные на метаданные: любое "значение ключа" может быть прикреплено к файлу или каталогу, но эта пара данных не историзируется сама по себе: если значение изменяется, оно переопределяет старое значение.
(это означает, что механизм на самом деле слабее, чем система свойств SVN, где свойства могут иметь историю; Git на другом конце не слишком увлекается метаданными)
- системная защита: владелец и права, связанные с файлом/каталогом или репозиториями, основаны на управлении правами базовой системы. В ClearCase нет прикладной учетной записи, и группа пользователей напрямую основана на существующей группе Windows или Unix (что довольно сложно в гетерогенной среде с клиентами Windows и сервером Unix VOB!)
(SVN больше похожа на "серверную" защиту, где сервер Apache может получить первый уровень защиты, но должен быть завершен с помощью крючков, чтобы иметь более тонкий цвет прав.
Git не имеет прямого управления правами и должен управляться с помощью перехватов во время push или pull между репозиториями)
-
Доступные крючки: любое действие ClearCase может быть целью крюка, называемого триггером. Это может быть операция pre или post.
-
Управляемый CLI: cleartool - это интерфейс командной строки, из которого можно выполнить все действия.