酷播亮新聞
最棒的知識補給站

【IPFS】利用IPFS技術在全球範圍內掛載你的分散式Git遠端倉庫 | 楓言楓語

文章摘要: $ rm ./*.pack 2.2 IPFS網路掛載 倉庫環境準備好了之後8080/ipfs/QmSPWkeZ8cwUSzEHSuvTjgQceWnrorHxG7rfJAEghsZmny ipfs-md-wiki-repo 我們拿到的 ipfs-md-wiki-repo 即為從IPFS網路中同步的G

一、需求背景

Git是目前世界上最先進的分散式版本控制系統,凡是進行軟體工程研發的工作人員應該都知曉這個工具。

我們除了在本地使用Git服務外,經常需要同步資料給7×24小時的遠端倉庫,方便備份和團隊協作,基於這種場景,我們會經常會使用Github、Coding這類的第三方Git平臺,但是對於某些視原始碼如生命的商業公司來說,既不想公開原始碼,又捨不得給GitHub交保護費,那就只能自己搭建並維護一臺Git伺服器作為私有倉庫使用。

那,有沒有一種方式,能更優雅和廉價地在全球範圍內掛載我們的Git倉庫呢?

答案是:沒問題,藉助IPFS技術,我們來一起實現看看!

二、實現過程

2.1 Git倉庫準備

首先,我們可以新建或者從遠端抓取一個我們想要掛載在IPFS網路中的Git倉庫:

$ cd Desktop
//--bare:不包含工作區,直接就是版本的內容
$ git clone --bare https://github.com/daijiale/ipfs-md-wiki

這邊我選取了一個之前託管在Github上的程式碼倉庫 ipfs-md-wiki ,想重新把這個倉庫託管在IPFS網路中,形成全球7X24小時能為我服務的分散式Git遠端伺服器。

現在,對於一個bare型Git倉庫,想要通過 HTTP 的方式以便其他人獲取和克隆,還需要配置一個特定的 post-update hook ,Git 附帶的 post-update hook 會預設執行命令 git update-server-info 來確保倉庫能被克隆和使用:

$ cd ipfs-md-wiki.git
$ git update-server-info

之後,我們開啟git倉庫物件包,通過將大的packfile分解成所有的單獨物件,以便我們git倉庫中存在多分支版本情況時,也能一一被ipfs網路識別並新增。

$ cp objects/pack/*.pack .
$ git unpack-objects < ./*.pack
$ rm ./*.pack

2.2 IPFS網路掛載

倉庫環境準備好了之後,剩下要做的就是把它新增到ipfs網路:

$ pwd
$ ipfs daemon
$ ipfs add -r .
...
added QmSPWkeZ8cwUSzEHSuvTjgQceWnrorHxG7rfJAEghsZmny ipfs-md-wiki.git

我們已經將 ipfs-md-wiki.git 成功新增到了IPFS網路,現在我們開啟另外一個終端,對此倉庫進行克隆和抓取操作:

$cd  ../Downloads
$git clone http://localhost:8080/ipfs/QmSPWkeZ8cwUSzEHSuvTjgQceWnrorHxG7rfJAEghsZmny ipfs-md-wiki-repo

我們拿到的 ipfs-md-wiki-repo 即為從IPFS網路中同步的Git倉庫,檢視一下倉庫結構:

和遷移前原先託管於Github的倉庫對比,資料一致同步過來了,後期也可以不用再託管在類似Github這樣的第三方中心化平臺上了:

2.3 健壯網路

  • 分散式擴散:我們可以在一些自己的伺服器或者私有云上使用 ipfs pin 固定Git倉庫資源,建議選用自己常駐地區域的機房,也可以使用第三方Ping服務: http://hitchain.io/zh/index.html 來便捷實現更多全球節點的掛載 ,價格還算合理: $0.35 1G/月。
  • 暴露公網:架設一些公共的閘道器,使得我們可以分享Git倉庫給更多人克隆和引入專案,可以參考我之前的文章: 【IPFS】(入門)基於IPFS和Ngrok構建自維護資源閘道器 ,也可以使用一些類似 infura 的第三方閘道器,目前我知道的,國內有不少朋友正在做自己的第三方閘道器,後面應該這塊基礎設施會很多。

三、使用場景

這裏介紹一個比較酷的使用場景:即當我們在編寫程式碼程式時候,匯入的依賴庫經常使用的是Git原始碼庫,而且原始碼庫經常會因其他人的提交而改變,而影響我本地的開發環境編譯,這裏,我們用IPFS hash 指紋唯一標識了每個版本的Git原始碼庫,可以不用顧慮這塊的內容,輕量化我們的本地工程,同時需要更新版本時,也可根據 hash 指紋來自由切換、指定:

import (
"github.com/daijiale/ipfs-md-wiki"
)
import (
mylib "gateway.ipfs.io/ipfs/QmSPWkeZ8cwUSzEHSuvTjgQceWnrorHxG7rfJAEghsZmny"
)

當然,後面也可以做成類似開源中國主導的Hitchain這樣的場景,類Github的開發者自治社羣: http://hitchain.io/zh/index.html

四、一些問題

有人會問,如果Git倉庫有更新,亦或是不滿足於靜態倉庫如何處理? 其實答案很簡單,有兩個解決方案:

五、下面是廣告(前方乏味,友情提示)

我和董天一前輩,黃禹銘博士撰寫的國內第一本IPFS技術中文書籍《IPFS與區塊鏈:原理與實踐》已經上架華章鮮度,紙質書將於今年10月由機械工業出版社華章文學出版,目前正在邀請返利補貼活動期,力度很大,歡迎早期朋友訂購,具體活動細則如下:

  • 每邀請一人購買,返30元現金,上不封頂
  • 購買華章電子版IPFS書籍權益
  • 按章節優先閱讀
  • 贈送作者簽名紙製書
  • 邀請好友返現30現金(秒提現,上不封頂)
  • 專屬社群

轉載宣告:特別鳴謝 天一哥(飛向未來 IPFS指南公眾號作者)ipfser.org 早期在IPFS大量的佈道工作,纔有了博主致力於IPFS應用實踐的想法,期望更多和我們一樣對這個領域感興趣的朋友能加入進來。

本文研究成果同時收錄在 https://github.com/ChainBook/IPFS-For-Chinese 中,該倉庫由 本體網路核心工程師 劉一痕 發起併兼任Maintainer,對現有的一些成熟公鏈技術進行原始碼中文解讀工作,遵守Mozilla Public License 2.0開放協議,歡迎感興趣的朋友加入。

已授權轉載的公眾號和媒體網站有:

  • 巴位元 IPFS專欄
  • ipfser.org
  • 公眾號:IPFS方得社羣 (IPFS-Fund)
  • 公眾號:IPFS指南(ipfs_guide)
  • 星鑑網:http://www.ipfsfirst.com/
  • 鏈得得-得得號:楓言楓語(個人號)

微信聯繫方式如下:

也歡迎加入知識星球:

  • 提供更多詳細的提問回覆
  • IPFS應用和開發方面的實踐資訊
  • 享受個人舉辦的一些IPFS線下活動的福利和權益

如有侵權請來信告知:酷播亮新聞 » 【IPFS】利用IPFS技術在全球範圍內掛載你的分散式Git遠端倉庫 | 楓言楓語