1. 程式人生 > >golang 實現GIT SERVER基本原理

golang 實現GIT SERVER基本原理

go語言實現的服務端程式和java一樣很容易做到跨平臺部署。對於私有git伺服器而言,使用golang實現也是一個不錯的選擇。

在 Github 上可以使用 HTTP 協議 fetch 和 push 倉庫中的程式碼, 其實想要寫一個簡單的 Git HTTP Server 是相當容易的。 

基本原理

     本地的 Git 在使用 HTTP 協議訪問遠端的 Git 倉庫時, 會分別發起如下三種類型的請求:
  • GET /:working_path/* 直接 Serve 遠端倉庫的靜態檔案到客戶端,這裡就是本地的倉庫從上游獲得資料的地方
  • GET /:working_path/info/refs 用於訪問遠端倉庫的 refs 資料,比如都有哪些 Branch 和 Tags 等等
  • POST /:working_path/git-<command> 用於在遠端倉庫執行指令,進行資料交流。Git 的 push 和 fetch 都要依賴這個請求來完成