Какой протокол git более умный, ssh или git (через ssh) или протокол https?

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

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

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

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

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

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

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

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

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

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

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

Заранее оцените ваши ответы.


person vengateswaran c    schedule 14.07.2010    source источник
comment
Итак, использование SSh://xyz... дает ли это преимущества протоколов ssh и git? ДА   -  person    schedule 15.07.2010
comment
Я до сих пор не вижу ответа на вопрос. У меня много гигабайт, и я могу использовать либо ssh, либо https, что займет меньше времени?   -  person Denis Howe    schedule 06.07.2015
comment
Это довольно плохой вопрос, поскольку в заголовке говорится о скорости, но описание вопроса больше касается работы различных протоколов.   -  person kapad    schedule 11.08.2018


Ответы (7)


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

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

person erjiang    schedule 14.07.2010
comment
Привет, Мазин... Спасибо. Это отвечает на мои опасения. Спасибо всем за ваш вклад. - person vengateswaran c; 15.07.2010
comment
git:// не имеет накладных расходов на шифрование или аутентификацию, которые реализует ssh://. git:// использует тот же механизм быстрой передачи данных, что и ssh://, но менее интенсивен на стороне сервера. - person aus; 19.07.2013
comment
Аккуратный. Я буду придерживаться SSH, потому что он создан с учетом требований безопасности. - person Aditya M P; 07.08.2013
comment
^ Какова ваша точка зрения? В чем он устарел? Бесполезно заявлять об этом, ничего не объясняя. - person underscore_d; 29.09.2015

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

И ssh, и https эквивалентны, начиная с Git 1.6.6+ (2010 г.) и реализации умного протокола HTTP. :

умный http

Теперь вы можете использовать ssh или https для чтения и записи ваших репозиториев.
Вы также можете https://stackoverflow.com/a/18588665/6309.
Добавьте правильную переменную среды, если вам нужно использовать прокси.

Q3 2015, как Yousha Aleayoub упоминает в комментариях:

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

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

git-http-backend – это:

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


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

Из Pro Git Book:

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

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

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

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

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

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

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

person VonC    schedule 14.07.2010
comment
@Вал спасибо. Использование ssh влечет за собой собственные дебаты об управлении доступом пользователей: см. комментарии stackoverflow.com/a/16184533/6309. - person VonC; 24.04.2013
comment
Примечание для себя: с 25-м голосованием серебряный значок «Хороший ответ» за этот ответ стал моим 1000-м (мне тоже потребовалось почти 6 лет). - person VonC; 01.08.2014
comment
URL-адреса клонов https:// доступны во всех репозиториях, общедоступных и частных. Они умны, поэтому они предоставят вам либо доступ только для чтения, либо доступ для чтения/записи, в зависимости от ваших разрешений на доступ к репозиторию. help.github.com/articles/what-remote-url -должен-я-использовать - person Yousha Aleayoub; 16.09.2015
comment
ТАКЖЕ, git http-backend: простая программа CGI для предоставления содержимого репозитория Git клиентам Git, получающим доступ к репозиторию по протоколам http:// и https://. Программа поддерживает извлечение клиентов с использованием как интеллектуального протокола HTTP, так и обратно совместимого немого протокола HTTP, а также отправку клиентов с использованием интеллектуального протокола HTTP. - person Yousha Aleayoub; 16.09.2015

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

Кажется, что начиная с Git 1.6.6, HTTP больше не «тупой». Из блога веб-сайта Git:

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

person Xavi    schedule 13.01.2014

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

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

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

person Community    schedule 14.07.2010
comment
Спасибо. Я не могу полностью согласиться с этим ответом. Потому что вам не нужно запускать демон GIT, если вы используете git push ssh://user@server/location. Когда демон git не работает, как вы говорите, что git туннелируется через SSH? Кто обрабатывает протокол git, если сервер протокола git не работает? - person vengateswaran c; 14.07.2010
comment
ssh — это просто транспорт, он по-прежнему использует протокол git поверх ssh. Именно так это работает через ssh, git через ssh — самый эффективный метод работы с удаленными репозиториями. Вам по-прежнему нужен git на удаленной машине, но он не использует демона, это не так сложно. - person ; 15.07.2010
comment
Я почти уверен, что есть разница между ssh:// и git+ssh://. - person erjiang; 15.07.2010
comment
@mazin, если вы имеете в виду туннелирование голого протокола git через ssh, то да, есть разница, вам нужно выполнить множество загадочных настроек и запустить демон сервера в удаленном репозитории, ничего положительного в этом нет. - person ; 15.07.2010
comment
@mazin k.: В Git ssh://host/resource, git+ssh://host/resource, ssh+git://host/resource и host:resource — это один и тот же протокол. См. c05186c (поддержка git+ssh:// и ssh+git:// URL, 2005-10-14). - person Chris Johnsen; 15.07.2010

Из Википедии:

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

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

Git Data ---> [SSH encrypts data] ----- Internet -----> [SSH decrypts data] ----> Git Data
person David Pratte    schedule 14.07.2010
comment
Спасибо за этот ответ, он решает мою проблему, но не могли бы вы сказать мне, какой URL-адрес используется для обеспечения того, чтобы запрос действительно был настроен на сервер протокола git. Это какая-то ссылка ssh://user@host:[git port]/repository location??? Пожалуйста, подтвердите. - person vengateswaran c; 14.07.2010
comment
ничто не туннелируется ни на один протокольный сервер. вы не хотите использовать голый протокол git, это не оптимальное решение. - person ; 15.07.2010

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

person Philip Oakley    schedule 17.07.2011

Быстрый поиск файлов пакета во время клонирования 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.
person Sachin Naik    schedule 17.06.2014