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

 


作者:戴嘉乐


一、需求背景
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 
 




这边我选取了一个之前托管在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仓库有更新,亦或是不满足于静态仓库如何处理? 其实答案很简单,有两个解决方案:

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

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

你可能感兴趣的:(利用IPFS在全球范围内挂载你的分布式Git远程仓库)