Ответ 1
В этом случае я только что представил DVCS (Git) в крупной банковской компании, где Perforce, SVN или ClearCase были централизованными VCS вариантов:
Я уже знал о проблемах (см. Мой предыдущий ответ Можем ли мы наконец перейти к DVCS в корпоративном программном обеспечении? Является ли SVN еще "обязательным для разработки?" )
Я был оспорен на трех фронтах:
-
централизация: в то время как децентрализованная модель имеет свои достоинства (и разрешает частные коммиты или работает без сети, имея доступ к полной истории), все равно должен быть четкий набор централизованного РЕПО, выступая в качестве основной ссылки для всех разработчиков.
-
аутентификация: DVCS позволяет вам "подписаться" (зафиксировать) ваш код как... почти любой (автор "
foo
", email "[email protected]
" ).
Вы можете сделатьgit config user.name foo
илиgit config user.name whateverNameIFeelToHave
, и в нем все ваши фиксации с фиктивным именем.
Это не очень хорошо сочетается с уникальным централизованным справочником пользователей Active Directory, используемым крупными предприятиями. -
авторизация: по умолчанию вы можете клонировать, нажимать или перемещать в любой репозиторий и изменять любую ветку или любой каталог.
Для чувствительных проектов это может быть проблемой блокировки (банковский мир обычно очень защищает некоторые алгоритмы ценообразования или quants, которые требуют строгого доступа для чтения/записи для очень ограниченного числа людей)
Ответ (для установки Git) был:
- централизация: для любого репозитория должен быть установлен уникальный сервер для всех пользователей.
Резервное копирование заботится (инкрементный каждый день, полный каждую неделю).
DRP (план аварийного восстановления) был реализован со вторым сервером на другом сайте и с репликацией данных в режиме реального времени через SRDF.
Эта настройка сама по себе не зависит от типа ссылочного или необходимого инструмента (DVCS, Nexus repo или основного планировщика Hudson или...): любой инструмент, который может иметь решающее значение для выпуска в производство, должен быть установлен на серверах с резервным копированием и DR.
.
- аутентификация: только два протокола позволяют пользователям получать доступ к основным репозиториям:
- ssh, с открытым/закрытым ключом:
- полезен для пользователей, внешних по отношению к организации (например, оффшорная разработка),
- и полезно для общих учетных записей, которые менеджер Active Directory не хочет создавать (поскольку это будет анонимная учетная запись): реальный человек должен нести ответственность за эту общую учетную запись, и это будет тот, кто владеет закрытый ключ
- https-based, с аутентификацией пользователей Apache через параметр LDAP: таким образом, фактический логин должен быть предоставлен для любой операции Git в этих репозиториях.
Git предлагает его с smart http protocol, позволяя не простоpull
(читать) через http, но такжеpush
(писать ) через http.
- ssh, с открытым/закрытым ключом:
Элемент аутентификации также усилен на уровне Git с помощью post-receive
, который гарантирует, что по крайней мере один совершает то, что вы нажимаете на У репо есть "имя коммиттера", равное имени пользователя, обнаруженному через протокол shh или http.
Другими словами, вам необходимо правильно настроить ваш git config user.name
, или любой щелчок, который вы хотите сделать для центрального репо, будет отклонен.
.
- авторизация: обе предыдущие настройки (ssh или https) подключены для вызова того же набора perl script, с именем gitolite, с параметрами:
- фактическое имя пользователя, обнаруженное этими двумя протоколами
- команда Git (клон, push или pull), который пользователь хочет сделать
gitolite perl script будет анализировать простой текстовый файл, где авторизации (доступ для чтения/записи для всего репозитория или для ветвей в данном репозитории или даже для каталогов в репозитории).
Если уровень доступа, требуемый командой Git, не соответствует ACL, определенному в этом файле, команда отклоняется.
Выше описано, что мне нужно реализовать для параметра Git, но что более важно, в нем перечислены основные проблемы, которые необходимо решить для настройки DVCS, чтобы иметь смысл в большой корпорации с уникальной базой пользователей.
Тогда и только тогда DVCS (Git, Mercurial,...) может добавить значения из-за:
-
обмен данными между несколькими сайтами: пока эти пользователи проходят аутентификацию через один и тот же Active Directory, они могут быть расположены по всему миру (компании, с которыми я работал, имеют разработки, обычно между командами через две или три страны). DVCS, естественно, предназначен для обмена эффективными данными между этими распределенными командами.
-
репликация по средам: настройка, обеспечивающая аутентификацию/авторизацию, позволяет клонировать эти репозитории на других выделенных серверах (для тестирования интеграции, тестирования UAT, предпроизводственного и предварительного развертывания )
-
автоматизация процессов: легкость, с которой вы можете клонировать репо, также может использоваться локально на одной пользовательской рабочей станции, для целей тестирования модулей с помощью методов "охраняемых коммитов" и других умных использует: см. "Какое самое умное использование исходного репозитория, который вы когда-либо видели?.
Короче говоря, вы можете нажать на второе местное репо, отвечающее за:- различные задачи (unit test или статический анализ кода)
- возврат к основному репо, если эти задачи успешны.
- пока вы все еще работаете в первом репо, не дожидаясь результата этих задач.
.
- функции убийцы: любой DVCS поставляется с теми, главная из которых - слияние (когда-либо пытались сделать сложный процесс слияния с SVN? Или sloooowly объединить 6000 файлов с помощью ClearCase?).
Только это (слияние) означает, что вы действительно можете использовать ветвление, одновременно имея возможность объединить ваш код с другой "основной" линией разработки, потому что вы будет делать это:- сначала локально внутри вашего собственного репо, не нарушая никого.
- затем на удаленном сервере, нажав результат этого слияния на центральное репо.