我希望能够将git存储库同步到AWS S3进行备份。此外,我希望公众能够git clone备份。我的步骤是:
s3cmd mb s3://lktesting
git update-server-info
s3cmd -P sync .git/ s3://lktesting
s3cmd ws-create s3://lktesting
s3cmd ws-info s3://lktesting
Run Code Online (Sandbox Code Playgroud)
我以为这曾经有用,但现在我得到了:
git clone http://lktesting.s3-website-ap-southeast-1.amazonaws.com/
Cloning into 'lktesting.s3-website-ap-southeast-1.amazonaws.com'...
error: The requested URL returned error: 403 Forbidden (curl_result = 22, http_code = 403, sha1 = bf866b95d9517ea38e213740cead5cf1c313f5aa)
Checking connectivity... done.
Run Code Online (Sandbox Code Playgroud)
有人知道我在想什么吗?
如果您想避免任何同步问题(如.git/objects/...丢失),请不要同步.git
使用 agit bundle仅复制一个代表 git 存储库压缩版本的文件(请参阅“如何通过电子邮件向某人发送 git 存储库? ”)。
该文件充当成熟的 git 存储库:您可以git clone从中获取。
cd /path/to/your/repo
git bundle create /tmp/myrepo.bundle --all
s3cmd -P sync /tmp/myrepo.bundle s3://lktesting
git clone http://lktesting.s3-website-ap-southeast-1.amazonaws.com/myrepo.bundle
Run Code Online (Sandbox Code Playgroud)
但是,您无法推送到它,因此您可能希望在您的 s3 实例中直接克隆它,并从未压缩的 s3 存储库中克隆。
下面的Git对象.git可能作为单个文件存在,也可能存在git pack中。在Git的哑HTTP协议将尝试获取一个对象作为一个单独的文件,且仅当此失败,“404未发现”,它会寻找一个包。
显然,如果您向所有人授予“列表”权限,则Amazon S3存储桶将仅返回404代码:如何为存储桶中不存在的密钥提供S3存储桶返回404(而不是403)/
更新:您可以使用AWS CLI和来自s3api的put-bucket-acl分配必要的权限。
在S3存储桶中托管可克隆git存储库的完整命令序列:
BUCKET=my-bucket-name
# Setup
aws s3 mb s3://$BUCKET
aws s3api put-bucket-acl --bucket $BUCKET --acl public-read
# Sync
git update-server-info
aws s3 sync --acl public-read .git s3://$BUCKET
# Clone
git clone https://$BUCKET.s3.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1683 次 |
| 最近记录: |