#git-repository #s3 #git #git-remote #gpg #aws

app git-remote-s3

使用gpg加密推送和从s3存储桶拉取git仓库

4个版本

0.1.4 2023年1月24日
0.1.3 2022年2月6日
0.1.2 2019年12月1日
0.1.1 2019年10月10日

开发工具 中排名 735

每月下载 29

MIT 许可证

24KB
530 代码行

Git Remote S3 Helper

推送和从s3存储桶拉取git仓库。使用gpg加密仓库内容(但不包括分支名称!)后再发送到s3。

这主要用于小型团队,他们不想托管自己的私有仓库,但仍想管理自己的加密。例如,我的用例是从桌面定期备份仓库并拉取到笔记本电脑进行远程开发。

示例用法

使用s3传输添加远程仓库

git remote add s3remote s3://my_bucket/prefix

然后您可以像往常一样推送/拉取远程仓库

git pull s3remote master

git push s3remote

甚至可以从s3克隆

git clone s3://my_bucket/prefix

安装

  • git-remote-s3放入您的PATH
    • 在此处下载最新版本(链接),解压缩并将其放入您的PATH
    • 或者,使用cargo安装: cargo install git-remote-s3
  • 确保已设置s3凭证
    • 有关rusoto库如何加载凭证的详细信息,请参阅此处(类似于aws命令行)。
  • 设置gpg
    • 将尝试使用git config user.email作为接收者进行gpg加密。您需要确保为该用户设置了公钥和私钥。
    • 或者,您可以使用remote.<name>.gpgRecipients配置来设置一个空格分隔的接收者列表。

设计说明

由于s3的最终一致性行为,当推送到“正规”的git仓库时,推送的语义略有不同。尝试阻止不包含当前头作为祖先的非强制推送(正如正规git仓库所做的那样),但最终一致性意味着这并不保证。可能存在同一分支的多个头,在这种情况下,客户端将最新的头视为真实。可以使用以下命令查看分支的所有头:git ls-remote - 最新的(最新)头具有分支的名称;使用命名方案显示较旧的头:<分支名称>__<sha>。旧头将保留,直到推送新的头,该头将旧头作为祖先,此时将删除旧头。这可以防止数据丢失,但将手动合并旧分支的负担放在用户身上。

每个分支(在用git bundle捆绑并使用gpg加密后)都使用密钥s3://bucket/prefix/<ref_name>/<sha>.bundle存储在s3上。平均而言,一个git push将涉及两次s3操作,一次列表、一次put和一次delete。一个git pull将涉及一次列表和一次get s3操作。

未来的改进

  • 更好地通知用户s3上有多个头。
    • 当尝试推送/获取且分支有多个头时显示警告?
  • 允许通过remote.<name>.gpg禁用gpg
  • 使用gpg.program

依赖项

~28–41MB
~760K SLoC