Что происходит быстрее, протокол ssh или git?

Что эффективнее? SSH://или Git://(сжатие файлов)

Я понимаю, что протокол Git, Git является интеллектуальным, потому что на обоих концах commumnication есть агент протокола для сжатия передачи файла, что приводит к более быстрому клонированию, эффективно используя пропускную способность сети.

Из книги О'Рейли я нашел следующие утверждения.

For secure, authenticated connections, the Git native 
protocol can be tunneled over an SSH connection using
the following URL templates:

ssh: ///[[email protected]]example.com[:port]/path/to/repo.git
ssh: //[[email protected]]example.com/path/to/repo.git
ssh: //[[email protected]]example.com/~user2/path/to/repo.git
ssh: //[[email protected]]example.com/~/path/to/repo.git*

Я не уверен, имеет ли автор то, что он говорит. Он говорит о протоколе Git, который туннелируется через SSH.

С моей точки зрения, если вы не подключаетесь к порту Git (порт агента), протокол не действует. И SSH - это просто несжатый перенос файлов.
Но согласно автору, если мы используем SSH, он говорит, что протокол Git туннелируется над ним. Итак, SSH умнее в GIT?

V C, Спасибо за Ваш ответ. "Сетевые протоколы (HTTP и Git) обычно доступны только для чтения" Git можно сделать rw, когда вы запускаете deamon с помощью --enable = receive-pack.

Вот мои проблемы. Когда говорят, что протокол Git является интеллектуальным, это означает, что при выполнении Git clone, агент Git агент сжимает данные, которые отправляются обратно клиенту, поэтому клон должен быть быстрее. Im мой usecase, я буду устанавливать сервер Git в hongkong и использовать его в sanjose и других странах, поэтому, я хочу быть эффективными по сети из-за проблем с задержкой.

Итак, мой вопрос: когда я использую Git clone ssh://user @server/reposloc, я также получаю преимущества протокола Git. Согласно книге авторов Orelly, он означает, что Git туннелируется поверх ssh, тогда как работает протокол Git, когда у меня нет Git daeomon, запущенного на сервере.

Итак, используя SSh://xyz... дает ли это как преимущество протоколов ssh и Git?

оцените свои ответы заранее.

Ответ 1

Взгляните на вторую часть на этой странице

Единственный "немой" протокол - это прямой HTTP, который не требует особых усилий на сервере. В обоих протоколах git://и ssh://процесс git upload-pack (который не является демоном) разветвляется на сервере, который взаимодействует с клиентом, который запускает git fetch-pack. И в ssh://и git://вы получаете "умную" связь.

Ответ 2

Обновление 2010-2014:

Оба ssh и https эквивалентны, поскольку Git 1.6.6+ (2010) и реализация смарт-протокола http:

smart http

Теперь вы можете использовать ssh или https для доступа для чтения/записи к вашим репозиториям.
Вы также можете определить, поддерживает ли ваш удаленный сервер смарт-http.
Добавьте правильную переменную среды, если вам нужно использовать прокси.

Q3 2015, как Юша Алейюб упоминает в комментариях:

GitHub" Какой удаленный URL следует использовать?

Клонные URL https:// доступны во всех репозиториях, открытых и закрытых.
Они умны, поэтому они будут предоставлять вам доступ только для чтения или чтения/записи, в зависимости от ваших прав доступа к репозиторию.

git-http-backend:

простая программа CGI для обслуживания содержимого репозитория Git для Git клиентов, обращающихся к репозиторию через протоколы http:// и https://.
Программа поддерживает выборки клиентов с использованием как смарт-протокола HTTP, так и протокола Dumb HTTP, совместимого с обратной совместимостью, а также клиентов, использующих интеллектуальный протокол HTTP.


Оригинальный ответ (июль 2010):

Из Pro Git Книга:

Вероятно, наиболее распространенным транспортным протоколом для Git является SSH.
Это связано с тем, что SSH-доступ к серверам уже настроен в большинстве мест - и если это не так, его легко сделать.

SSH также является единственным сетевым протоколом, с которого вы легко можете читать и писать на. Остальные два сетевых протокола (HTTP и Git) обычно доступны только для чтения, поэтому, даже если у вас есть их для немытых масс, вам все еще требуется SSH для ваших собственных команд записи.

SSH также является аутентифицированным сетевым протоколом; и потому что его повсеместно, его вообще легко настроить и использовать.

Таким образом, это не "разумнее", чем протокол Git, просто дополнительный протокол для некоторых функций, не адресуемых протоколом Git.

Недостатком протокола Git является отсутствие аутентификации. В общем случае нежелательно для протокола Git быть единственным доступом к вашему проекту.
Как правило, вы можете подключить его к SSH-доступу для нескольких разработчиков, у которых есть доступ для ввода (записи), и все остальные используют git:// для доступа только для чтения.

Он также требует доступа к брандмауэру к порту 9418, который не является стандартным портом, который всегда разрешают корпоративные брандмауэры. За крупными корпоративными брандмауэрами этот неясный порт обычно блокируется.

(вот почему в моем магазине мне нужно использовать ssh + git, а не только git, даже для доступа на чтение: 9418 заблокирован...)

Ответ 3

При доступе к git по ssh он просто туннелирует протокол git через ssh, проще настроить и более безопасно, это предпочтительный способ доступа к удаленным репозиториям.

Это на самом деле "умнее", чем голый протокол git, поскольку он может обеспечивать аутентификацию пользователя через механизмы ssh. git выполняет все сжимание и что не на клиенте независимо от транспортного уровня, и он распаковывает его на сервере.

Сервер "git" не делает этого, все это происходит при использовании ssh. сервер git следует избегать, если вы хотите иметь возможность писать в удаленный репозиторий. если вы хотите доступ только для чтения git или HTTP-транспорты "ОК", но если у вас есть разработчики, которые должны писать в репозиторий, вы должны просто использовать ssh. Настройка туннелей для сервера git просто добавляет сложности и конфигурации, которые будут хрупкими и ничего не получат.

Ответ 4

(Я хотел добавить комментарий к ответу @erjiang, но мне не разрешено, потому что у меня недостаточно репутации StackOverflow.)

Похоже, что с Git 1.6.6 HTTP больше не "тупой". Из Git веб-сайт:

Однако, начиная с версии 1.6.6 в конце прошлого года (2009) Git теперь может использовать протокол HTTP примерно так же эффективно, как gitили ssh версии

Ответ 5

От Wikipedia:

Чтобы настроить туннель SSH, можно настроить SSH-клиент для перенаправления указанного локального порта на порт на удаленной машине. Как только туннель SSH будет установлен, пользователь может подключитесь к указанному локальному порту для доступа к сетевой услуге. Локальному порту не нужно имеют тот же номер порта, что и удаленный порт.

Если вам нужно какое-то представление в ASCII-исполнении:

Git Data ---> [SSH encrypts data] ----- Internet -----> [SSH decrypts data] ----> Git Data

Ответ 6

Различные протоколы находятся на разных уровнях (например, модель уровня ISO 7), поэтому вы можете использовать оба устройства, так же, как вы могли бы подключаться через Wires или Wirelessly или волокно.

Ответ 7

Быстрый поиск файлов пакета во время клонирования git будет отображать один файл пакета, который отправляется с сервера клиенту. Файл пакета указан в .git/objects/pack/pack-XXXX.pack. Файлы, отправляемые с сервера клиенту, сначала упаковываются, сжимаются. Затем есть одна копия упакованного содержимого. Это можно увидеть при сравнении упакованных файлов с использованием lsof -p на стороне сервера и lsof -p на стороне клиента. В примерном случае файлы 200 Мбайт загружаются с сервера на клиент...

1) Server side 
   lsof -p 8079 | grep pack
   git-uploa 8079  REG  253,2 277896169 5140075 /home/server/work/work0617/.git/objects/pack/pack-492945ae602a975d46df133f6ded9642146fb6a7.pack
   git-uploa 8079  REG  253,2   1703472 5140076 /home/server/work/work0617/.git/objects/pack/pack-492945ae602a975d46df133f6ded9642146fb6a7.idx
   git-uploa 8079  REG  253,2 277896169 5140075 /home/server/work/work0617/.git/objects/pack/pack-492945ae602a975d46df133f6ded9642146fb6a7.pack

2) Client side
   lsof -p 3140 | grep pack
   git     3140  3u   REG    8,1 101031935 3681610 /home/client/work/work0617/work0617/.git/objects/pack/tmp_pack_pRfYPa

 3) The server side pack file 277MB. The file on the client side is 101MB and growing. So a single compressed file is copied over.