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 次
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