2015-12-06 13 views
3

Я пишу программу, которая может взять URI клона Git и сделать клон репозитория на машине пользователя. Для этого программа должна знать, когда она может продолжить клонирование, и когда ей нужно отказаться. man page for git-clone говорит, что:Какие протоколы передачи поддерживают libgit2 для клонирования?

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

Сколько это поддерживается libgit2?

Я знаю, что, по крайней мере, они поддерживают HTTP, HTTPS и SSH, но как насчет других?

+0

Я бы предположил, что libgit2 не поддерживает * больше *, чем сам Git, и поскольку он поддерживает HTTP (S) и SSH, что еще вы ищете? – Whymarrh

+0

@Whymarrh Просто любопытно. Если libgit2 фактически поддерживает устаревшие протоколы, такие как FTP, я не хочу, чтобы программа лежала и говорила пользователю, что она не может клонировать их репозиторий. –

ответ

4

tl; dr: local, git, ssh, http, https. Он не поддерживает и никогда не поддерживал ftp, ftps или rsync.


ПРИМЕЧАНИЕ: Это все как v0.23.4.

Список транспортных механизмов Поддержка libgit2 находится в их "transport" section. Это высокоуровневые транспортные алгоритмы. Конкретные сетевые протоколы являются субтранспортом.

  • холостые
  • местные
  • смарт
  • SSH-с-пути

Из них мы только забота о local и smart (см transport.c). local предназначен для локальных файлов, таких как file:///home/foo/some_project. ssh-with-pathsis a wrapper around smart-ssh that lets you explicitly state which programs on the remote to use, что вы, вероятно, никогда не будете использовать. Что-то по сети использует smart.

Протокол "smart" - это тот, который ожидает, что пульт будет больше, чем просто файловый сервер. Вместо того, чтобы выполнять всю работу, чтобы определить, какие объекты нужны, запрашивая файлы и выбирая их локально, он может вызывать определенные программы на пульте, чтобы сделать это более эффективно. Here's a discussion of the smart vs dumb protocols.

Какие сетевые протоколы libgit2 поддерживаются в их "smart" section.

  • SSH
  • HTTP
  • HTTPS
  • мерзавец

Вы можете увидеть это более подробно в transport.c.

Что касается устаревших протоколов ftp, ftps и rsync, libgit2 их не поддерживает, и вы можете видеть их с their change log, они никогда не поддерживали их. Также я не знаю, поддержит ли libgit2 немой протокол.

+0

ssh-with-paths не является протоколом, это имя конструктора для ssh * transport *, где вы указываете исполняемые пути вместо использования по умолчанию. –