Какая разница в деталях между сервером и клиентом GIT smart HTTP Protocol
Я надеюсь, что кто-то ответит на разницу в деталях между серверной и клиентской сторонами протокола GIT smart HTTP.
Лучший способ - предоставить некоторые справочники и коды для продвижения.
Некоторые люди сказали,
libgit2 уже выставляет упаковщика. Однако вам придется реализовать серверный протокол самостоятельно.
Можем ли мы реализовать серверную часть с помощью libgit2sharp(или libgit2) с небольшим кодом?
После вопроса выше. Мы можем иметь дело с пакетом с git.exe receive-pack
а также git.exe upload-pack
команда с --stateless-rpc
аргумент. Реализованный код здесь и здесь.
Можем ли мы скомпилировать приведенные выше коды как нативный код в сборку.Net? Хотя мы можем соединить поток ASP.NET и git.exe по конвейеру, но это не очень хороший способ.
1 ответ
Если вы просто ищете библиотеку.NET для взаимодействия с GIT, попробуйте GitSharp или nGit. Исходный код для GitSharp также может быть полезен, поскольку вы, кажется, являетесь разработчиком aC#, а GitSharp не является автоматическим портом. Иначе:
(как показывают комментарии выше), по этому протоколу не так много легко найти документацию. К счастью, Git упрощает обратный инжиниринг протокола и не должен быть слишком сложным.
Более новый протокол Smart-Git теперь добавляет еще один параметр в запрос HTTP GET, который более старые серверы будут игнорировать (старше 1.6.6), и заставит более новые серверы переключаться в многопостовый режим. На более новом сервере в этот момент создайте пользовательский пакетный файл для клиента, содержащий только те файлы, которые ему необходимы.
Для того, чтобы перепроектировать точно, что происходит во время части протокола, вы можете использовать переменную окружения:
SET GIT_CURL_VERBOSE=1
Если этот параметр включен, Git будет выводить HTTP-запросы и заголовки для каждого вызова, а также выводить код состояния HTTP и заголовки ответов для каждого ответа. Вы также можете использовать такой инструмент, как Fiddler, чтобы увидеть весь происходящий http-трафик. Для этого вам нужно будет использовать вторую переменную среды Git, чтобы заставить GIT проходить через http-прокси:
SET HTTP_PROXY=http://localhost:8888
На этом этапе вы в основном начинаете вводить команды Git и отслеживать HTTP-трафик.
Например, выполнить "git push -u origin master"
возвращает:
GET http://localhost:8000/gitserver/git/info/refs?service=git-receive-pack
Эта запись в блоге имеет достойный пример описанной выше методологии.