为“网络”备份创建新传输

时间:2014-07-23 10:19:54

标签: libgit2

我正在安全存储领域开展基于S3的“阴天”研究项目。我想利用libgit2在我的本地客户端进行版本控制,并相信创建新的传输可能是最好的解决方案。这将保持完全兼容的回退本地git历史记录(与新的odb或refdb后端相比)。

在查看API时,似乎上传推送和下载包文件功能非常重要。为了解决这个问题,我真的很想写一个S3-transport(后端)。虽然我不认为这可能是无竞争的(由于S3的最终一致性),但这应该显示大多数可能的问题。

目前我不确定如何从远程存储中生成packfiles。使用git_packbuilder_insert,我可以添加所有需要的OID,但是从哪里检索实际数据?这是从存储库(使用packbuilder_new时引用)中检索的吗?如果是这样,我应该为该传输写一个新的传输以及相应的存储库类型吗?

另一个问题是,如果我应该记录我的调查结果(我希望获得资金用于花费几天到几周的时间来实现这一点),还是这个用例非常罕见,值得记录?

1 个答案:

答案 0 :(得分:1)

S3不会说智能协议或为您发出包文件,这意味着您必须构建某种传输层,该传输层将存储在S3中的Git对象以某种可以消耗的方式传递给libgit2

正是 ODB层的目的是什么。如果您创建了一个从S3读取并写入S3的ODB,那么您将能够从该后端存储创建git_repository。完成后,您可以提供必要的机制来在本地克隆它。

或者,如果您想要一个由文件和S3支持的单git_repository,那么您可以创建一个T型样ODB层,该层将写入本地文件系统ODB驱动程序和S3 ODB之一

但除非我误解了你的动机,否则创造一个自定义的运输工具不会产生你想要的结果。