[英]What details difference between server side and client of GIT smart HTTP protocol
我希望有人能夠回答GIT智能HTTP協議的服務器端和客戶端之間的細節差異。
最好的方法是提供一些推薦的參考書和代碼。
有人說,
libgit2已經公開了一個packbuilder。 但是,您必須自己實現服務器端協議。
我們可以用libgit2sharp(或libgit2)用小代碼實現服務器端嗎?
按照上面的問題。 我們可以使用--stateless-rpc
參數處理包含git.exe receive-pack
和git.exe upload-pack
命令git.exe upload-pack
。 實現的代碼在這里和這里 。
我們可以將上面的代碼編譯為.Net程序集中的本機代碼嗎? 即使我們可以通過管道連接ASP.NET流和git.exe,但這不是一個好方法。
如果您只是在尋找與GIT交互的.NET庫,請嘗試使用GitSharp或nGit 。 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.