利用IPFS在全球范围内挂载你的分布式Git远程仓库

image

一、需求背景

Git是目前世界上最先进的分布式版本控制系统,凡是进行软件工程研发的工作人员应该都知晓这个工具。

我们除了在本地使用Git服务外,经常需要同步数据给7x24小时的远程仓库,方便备份和团队协作,基于这种场景,我们会经常会使用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

image

这边我选取了一个之前托管在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

image

我们已经将ipfs-md-wiki.git成功添加到了IPFS网络,现在我们开启另外一个终端,对此仓库进行克隆和抓取操作:

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

我们拿到的ipfs-md-wiki-repo即为从IPFS网络中同步的Git仓库,查看一下仓库结构:

image

和迁移前原先托管于Github的仓库对比,数据一致同步过来了,后期也可以不用再托管在类似Github这样的第三方中心化平台上了:

image

2.3 健壮网络

  • 分布式扩散:我们可以在一些自己的服务器或者私有云上使用ipfs pin 固定Git仓库资源,建议选用自己常驻地区域的机房,也可以使用第三方Ping服务:https://pinbits.io/来便捷实现更多全球节点的挂载 ,价格还算合理: $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

image

四、一些问题

有人会问,如果Git仓库有更新,亦或是不满足于静态仓库如何处理? 其实答案很简单,有两个解决方案:

  • 1.我们在加入IPFS网络前,对Git仓库里新建一个hash-log文件,用以记录每次Git Log和ipfs hash更新的映射表,保持同步动态更新即可。

  • 2.运用ipns命名系统保持动态更新,我们将在后面的实例中介绍这块内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 作者简介:戴嘉乐( Mr.Maple ) | 前百度高级研发工程师 | IPFS应用实践者&布道师|个人网站:ht...
    6bca7c813977阅读 572评论 0 0
  • GIT分布式版本控制系统最佳实践 这篇文章来自于老男孩教育高级架构师班12期的徐亮偉同学。 首先感谢老男孩架构师班...
    meng_philip123阅读 3,408评论 4 36
  • 休酣醉,莫酣醉, 酣醉更思忆。 月光照城殇,夜巷风相依, 去年旧时节,今岁又一春。 纵然思无趣,不忍戒相思。 ——...
    手握瓷杯阅读 305评论 0 2
  • 我国是有着五千年丰富文化底蕴的古老国度,传统文化,儒教思想教导我们尊老爱幼,提倡百善孝为先。“孝顺”的释义是:尽心...
    沙漠清泉1987阅读 452评论 0 1
  • 敲下这段文字的时候已经是公元二零一八年六月九号凌晨四点三十分,我其实是从二零一八年的六月八号晚上一直写东西到...
    爱澳的凡阅读 137评论 1 1