Назад | Перейти на главную страницу

от svn до git (+ LDAP + обновления без пароля + контроль доступа с паролем)

У нас есть настройка SVN, и есть некоторые вещи, которые нам в ней не нравятся, а некоторые вещи нам нравятся. Мы хотим перейти на git, но не уверены, какая именно настройка подойдет нам. В настоящее время мы используем SVN (с Authz) + Apache (с WebDAV и LDAP).

  1. Крючок для обновления действующего сайта [лайк]
  2. Обновление сайта в реальном времени не требует дополнительных действий [например]
  3. Обновление живого сайта использует сохраненный пароль [dislike]
  4. Для коммитов требуется централизованная аутентификация по паролю [например]
  5. Фиксация с действующего сайта изменяет сохраненные учетные данные [не нравится]
  6. Контроль доступа (для каждого репозитория) для коммитов [например]

Пункт 5 выше - это тот, который нас постоянно забивает. Кто-то делает коммит с живого сайта, а затем ловушка ломается.

Мы думаем использовать gitosis / gitolite для управления доступом, но, поскольку они используют ssh-ключи, мы не будем требовать пароли. Мы также думаем использовать git-http-backend и использовать Apache для аутентификации, но теряем ли мы тогда контроль доступа? Можно ли автоматически обновлять действующий сайт с помощью перехвата, если Apache требует аутентификации? Можем ли мы как-то объединить git-http-backend и gitosis / gitolite? Можем ли мы сохранить учетные данные http с помощью git?

Мы также думаем использовать git-http-backend и использовать Apache для аутентификации, но теряем ли мы тогда контроль доступа?

Нет, вы можете настроить аутентификацию с помощью ldap почти так же, как вы использовали ее для SVN. Gitweb и git-http-backend используют mod_ldap так же, как SVN для аутентификации.

Можно ли автоматически обновлять действующий сайт с помощью перехвата, если Apache требует аутентификации?

Git по умолчанию поставляется с gitweb. Это преимущественно то, что используется для онлайн-браузера для вашей базы исходного кода. Вы можете настроить его за Apache с помощью mod_ldap для целей аутентификации, как git-http-backend. Для обновления онлайн-браузера и репозиториев, перечисленных в нем, ловушка не требуется. Все это поддерживается cgi, git-http-backend.

Можем ли мы как-то объединить git-http-backend и gitosis / gitolite?

гитолит - это то, что вы хотите:

https://github.com/sitaramc/gitolite/wiki/

Гитоз в основном описывается:

Ubuntu-server: соглашение об именах пользователей gitosis

Лично мы просто используем LDAP для авторизации и аутентификации пользователей. Если вы используете LDAP, вам действительно не нужен gitolite для управления пользователями. Для этого вы можете использовать любой общий инструмент управления пользователями LDAP. Большинство дистрибутивов Linux поставляются с различными инструментами пользовательского интерфейса для управления openLDAP. Если у вас Windows, просто используйте активный каталог.

Оба подхода по умолчанию (git, gitweb, git-http-backend, LDAP) и gitolite поддерживают следующее:

  • они не являются «настоящими» пользователями, как при входе в систему на физическом хостинге (в зависимости от того, как вы используете LDAP)
  • они не получают доступа к оболочке (в зависимости от того, как вы используете LDAP)
  • контролировать доступ ко многим репозиториям git
  • доступ для чтения контролируется на уровне репо
  • может быть установлен без корневого доступа, при условии, что git и perl уже установлены, аутентификация чаще всего выполняется с помощью sshd, но вы также можете использовать httpd, если хотите (для этого может потребоваться root-доступ).

Однако, если вы хотите, чтобы такое детализированное управление пользователями без LDAP соответствовало следующим критериям, то лучшим решением может быть gitolite:

  • использовать одного пользователя unix ("настоящего" пользователя) на сервере
  • предоставить доступ многим пользователям гитолита
  • доступ на запись контролируется на уровне ветки / тега / файла / каталога, включая то, кто может перематывать, создавать и удалять ветки / теги

Из http://sitaramc.github.com/gitolite/index.html#gl_what

Можем ли мы сохранить учетные данные http с помощью git?

Да, вы можете хранить / назначать пользователей с помощью git config:

git config --global user.name "Foo Bar"
git config --global user.email "your@mail.address.com"
git config --global user.password "yourpassword"
git config --global github.user "yourusername"
git config --global github.password "yourpassword"

Хотя, если вы используете его с SSH, убедитесь, что вы используете сертификаты CA, а не самоподписанный. У Git есть этот странный прием, sslVerify = false, чтобы заставить его работать с самоподписанными сертификатами, что, похоже, противоречит цели использования сертификатов.

Когда вы собираетесь перенести код из svn в git, вам понадобится хороший инструмент для импорта. Я не смог найти ни одного, подходящего для больших репозиториев, поэтому написал свой собственный. Не стесняйтесь экспериментировать, если у вас возникнут проблемы с git-svn:

https://github.com/onepremise/SGMS

Если вы все еще предпочитаете использовать svn up для живого сайта, прочтите svn help up внимательно и обратите внимание на некоторые параметры, чтобы обрабатывать учетные данные в Smart Way

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens