#git-remote #ipfs #git #libgit2 #去中心化

app nip

一个将您的文件放置在“任何地方”的 IPFS git 远程辅助工具

3 个版本 (破坏性更新)

0.3.0 2019年2月25日
0.2.0 2018年12月11日
0.1.0 2018年12月8日

#10 in #libgit2

BSD-3-Clause

24KB
470

nip

nip 是一个 Git 远程辅助工具,它将您的存储库对象放在 IPFS 上 - 即 任何地方

安装

与大多数 Rust 包一样,使用 Cargo 安装将是最简单的方法。

$ cargo install nip

用法

重要:在尝试使用 nip 之前,请确保您的本地 IPFS 实例正在其标准端口上运行。

首次将现有存储库推送到 nip 远程

$ git remote add nip nip::new-ipfs # Use a magic placeholder URL representing a new IPFS repo
$ git push --all nip # Push all refs to a brand new repo

从 nip 克隆存储库

$ git clone nip::/ipfs/QmZq47khma5nP7DjHUPoERhKnfNUPqkr5pVwmS8A6TQSeN some_repo

使用 nipctl 进行存储库管理(进行中)

nip 附带了 nipctl - 一个用于 nip 存储库管理的实用工具。截至目前,其功能非常有限(打印对象和索引),但一些计划中的功能包括

  • 垃圾回收 - 删除所有未与任何 refs 项关联的对象
  • 管理 git 推送通知设置 - 取决于 此问题

它是如何工作的?

请参阅 FAQ.md 以了解底层 nip 功能的概览。

开发

如果您想对 nip 进行修改,请从 dev_bootstrap.sh 脚本开始。它将 nipctlgit-remote-nip 分别符号链接到 ~/.cargo/bin 中的 nipdevctlgit-remote-nipdev。结果,对于每个具有 nipdev:: 地址的远程,git 都将选择 git-remote-nipdev 而不是 git-remote-nip,这使得在开发过程中可以轻松进行测试。

限制

  • 运行时间 - nip 只能以 IPFS 允许的速度运行。
  • 存储库固定和 git 推送通知 - 对远程存储库进度感兴趣的人无法知道对其进行的推送。请参阅 此问题 了解解决方案的进展。
  • 磁盘空间 - 按设计,本地 Git 对象需要与 IPFS 对应项相匹配,这些对应项存储在您的本地 IPFS 节点的数据存储中。实际上这意味着每个推送到 nip 存储库的本地对象都需要以 IPFS 理解的形式存储在您的磁盘上。然而,nip 对所有与它一起使用的存储库保证对象去重,这意味着给定的 Git 对象在 IPFS 上只存储一次,不管它来自哪个存储库。
  • 对象大小 - nip 还不知道如何将对象流入/流出本地仓库,将会尝试将它们加载到RAM中,这会大大增加具有大型对象的仓库的内存占用。已追踪 此处

依赖项

~23-36MB
~611K SLoC