2013-05-20 77 views
3

我希望有人會回答GIT智能HTTP協議的服務器端和客戶端之間的細節區別。GIT智能HTTP協議的服務器端和客戶端有什麼細節區別

最好的辦法是提供一些參考書&代碼提前。


有人說,

libgit2已經暴露了packbuilder。但是,你必須自己實現服務器端協議。

reference to this link

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


按照上面的問題。我們可以使用git.exe receive-packgit.exe upload-pack命令與--stateless-rpc參數進行打包。實施的代碼是herehere

我們可以將以上代碼作爲本地代碼編譯到.Net程序集中嗎?儘管我們可以通過管道連接ASP.NET流和git.exe,但這不是一個好方法。

+0

看看git的源代碼;) – Chronial

+0

我不知道爲什麼我找不到任何的參考書?我不想閱讀更多的源代碼,因爲我有更多的時間。 – Aimeast

+0

而我不擅長C語言。這對我來說非常困難。 – Aimeast

回答

1

如果您只是在尋找與GIT交互的.NET庫,請嘗試GitSharpnGitsource code for GitSharp也可能很有用,因爲你看起來是一個c#開發人員,而GitSharp不是一個自動化的端口。否則:

(如上面的註釋所示),沒有很多關於此協議的文檔很容易找到。幸運的是,Git使協議的逆向工程變得簡單,並且不應該太困難。

較新的Smart-Git協議現在向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中推-u原點主」

回報:

GET http://localhost:8000/gitserver/git/info/refs?service=git-receive-pack 

This blog entry具有上文所描述的方法的一個體面例子。

+0

Tks!我知道你上面所說的一切。謝謝你們一樣! – Aimeast

相關問題