簡體   English   中英

GIT智能HTTP協議的服務器端和客戶端之間有什么細節區別

[英]What details difference between server side and client of GIT smart HTTP protocol

我希望有人能夠回答GIT智能HTTP協議的服務器端和客戶端之間的細節差異。

最好的方法是提供一些推薦的參考書和代碼。


有人說,

libgit2已經公開了一個packbuilder。 但是,您必須自己實現服務器端協議。

參考此鏈接

我們可以用libgit2sharp(或libgit2)用小代碼實現服務器端嗎?


按照上面的問題。 我們可以使用--stateless-rpc參數處理包含git.exe receive-packgit.exe upload-pack命令git.exe upload-pack 實現的代碼在這里這里

我們可以將上面的代碼編譯為.Net程序集中的本機代碼嗎? 即使我們可以通過管道連接ASP.NET流和git.exe,但這不是一個好方法。

如果您只是在尋找與GIT交互的.NET庫,請嘗試使用GitSharpnGit GitSharp源代碼也可能很有用,因為您似乎是ac#developer而GitSharp不是自動端口。 除此以外:

(如上面的評論所示),這個協議上沒有很多很容易找到的文檔。 幸運的是,Git使協議的逆向工程變得容易,並且不應該太困難。

較新的Smart-Git協議現在為舊服務器將忽略的GET http請求添加了另一個參數(早於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

此博客條目具有上述所述方法的一個很好的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM