Введение
Git поддерживает четыре сетевых протокола для передачи данных: локальный, HTTP, SSH и Git-протокол. В этой статье мы рассмотрим их особенности, достоинства, недостатки и сценарии использования, чтобы помочь выбрать подходящий протокол для вашего проекта.
Локальный протокол
Локальный протокол используется, когда удалённый репозиторий находится в другом каталоге на той же файловой системе, например, на общей NFS или на одном компьютере. Это удобно, если команда имеет доступ к общей файловой системе.
Примеры использования
Клонирование локального репозитория:
$ git clone /srv/git/project.git
Или с использованием префикса file://:
$ git clone file:///srv/git/project.git
Добавление локального репозитория в проект:
$ git remote add local_proj /srv/git/project.git
Примечание: Без file:// Git использует жёсткие ссылки или копирует файлы, что быстрее. С file:// данные передаются как по сетевому протоколу, что менее эффективно, но полезно для создания чистой копии репозитория без внешних ссылок.
Достоинства
- Простота настройки: использует существующие права доступа к файлам.
- Быстрый доступ к данным при использовании локальных путей.
- Удобство для быстрого обмена данными между коллегами, например:
git pull /home/john/project.
Недостатки
- Сложность доступа из удалённых мест: требуется монтирование диска, что может быть медленнее, чем сетевые протоколы.
- Медленнее на NFS по сравнению с SSH на том же сервере.
- Риск случайного повреждения: пользователи могут изменять или удалять внутренние файлы Git.
Протоколы HTTP
Git поддерживает два режима HTTP: «Умный» (Smart) и «Тупой» (Dumb). «Умный» HTTP, появившийся в Git 1.6.6, эффективен и популярен, тогда как «Тупой» HTTP предназначен только для чтения.
Умный HTTP
«Умный» HTTP работает аналогично SSH или Git-протоколу, но использует стандартные порты HTTP/S (80/443) и поддерживает аутентификацию по логину/паролю. Это делает его удобным для пользователей, особенно на платформах вроде GitHub.
Пример клонирования:
$ git clone https://github.com/schacon/simplegit
Один URL используется для чтения и записи (с аутентификацией).
Тупой HTTP
«Тупой» HTTP обслуживает голый репозиторий как набор файлов через веб-сервер. Настройка проста:
$ cd /var/www/htdocs/
$ git clone --bare /path/to/git_project gitproject.git
$ cd gitproject.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
Клонирование:
$ git clone https://example.com/gitproject.git
Примечание: Хук post-update выполняет git update-server-info для корректной работы клонирования и получения изменений.
Достоинства
- Единый URL для чтения и записи (в «Умном» HTTP).
- Простая аутентификация по логину/паролю, не требующая SSH-ключей.
- Шифрование через HTTPS и поддержка SSL-сертификатов.
- Простая настройка «Тупого» HTTP для чтения.
- Совместимость с корпоративными брандмауэрами (порты 80/443).
Недостатки
- Сложность настройки «Умного» HTTP на некоторых серверах по сравнению с SSH.
- Ввод учётных данных для записи может быть неудобным без кэширования (решается инструментами, такими как Keychain на macOS или Credential Manager на Windows).
- «Тупой» HTTP ограничен чтением.
Протокол SSH
SSH — популярный протокол для хостинга Git, обеспечивающий безопасный доступ с аутентификацией.
Пример клонирования:
$ git clone ssh://[user@]server/project.git
Или с синтаксисом, подобным scp:
$ git clone [user@]server:project.git
Достоинства
- Простота настройки: SSH-демоны широко распространены.
- Безопасность: данные шифруются, доступ возможен только по ключам.
- Эффективность: сжатие данных перед передачей.
Недостатки
- Отсутствие анонимного доступа: требуется SSH-доступ даже для чтения.
- Не подходит для open-source проектов, где нужен публичный доступ.
Git-протокол
Git-протокол использует специальный демон, работающий на порту 9418, без аутентификации.
Настройка требует создания файла git-export-daemon-ok в репозитории. Пример клонирования:
$ git clone git://server/project.git
Достоинства
- Высокая скорость: минимальные затраты без шифрования и аутентификации.
- Идеален для публичных проектов с большим трафиком.
Недостатки
- Отсутствие аутентификации: не подходит для записи без дополнительных настроек.
- Сложность настройки: требует запуска демона и открытия порта 9418, который может быть заблокирован в корпоративных сетях.
Заключение
Выбор протокола Git зависит от ваших потребностей: локальный протокол прост для общей файловой системы, «Умный» HTTP удобен и универсален, SSH обеспечивает безопасность, а Git-протокол — скорость для публичного доступа. Для open-source проектов лучше сочетать SSH или HTTP для записи и Git-протокол или «Тупой» HTTP для чтения.
Отзывы