我希望能够将git存储库同步到AWS S3进行备份。此外,我希望公众能够git clone
我的备份。 My steps是:
s3cmd mb s3://lktesting
git update-server-info
s3cmd -P sync .git/ s3://lktesting
s3cmd ws-create s3://lktesting
s3cmd ws-info s3://lktesting
我以为这曾经有用,但现在我得到了:
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.
有谁知道我错过了什么?
答案 0 :(得分:5)
.git
下的Git对象可能作为单个文件存在,也可能存在于git包中。 Git dumb HTTP protocol将尝试将对象作为单个文件获取,并且只有当它失败时才会找到" 404 Not found",它将查找包。
显然,如果您提供"列表"则Amazon S3存储桶将仅返回404代码。每个人的权限:How do I have an S3 bucket return 404 (instead of 403) for a key that does not exist in the bucket/
更新:您可以使用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
答案 1 :(得分:4)
如果您想避免任何同步问题(例如缺少.git/objects/...
),请不要同步.git
的内容
使用git bundle
仅复制代表git存储库压缩版本的一个文件(请参阅&#34; How can I email someone a git repository?&#34;)。<登记/>
这个文件充当了一个完整的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
你不能推送它,所以你可能想要在你的s3实例中直接克隆它,并从那个未压缩的s3 repo克隆。
答案 2 :(得分:1)
看起来像运行完全相同的方法,空存储库工作正常。
使用debug flags [0]运行相同的命令(git clone),当我在本地复制一些内容时,看起来在git repo中引用的某些对象[1]在S3存储桶中不存在(403是当密钥不存在时抛出的默认响应代码)。你的同步完全完成了吗?
[0]
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git clone http://lktesting.s3-website-ap-southeast-1.amazonaws.com/
[...]
GET /objects/03/4261c96d614614344a1b618c8ec3d8d2ff7d3c HTTP/1.1
Host: lktesting.s3-website-ap-southeast-1.amazonaws.com
User-Agent: git/2.5.4 (Apple Git-61)
Accept: */*
* The requested URL returned error: 403 Forbidden
[1] / objects / 03 / 4261c96d614614344a1b618c8ec3d8d2ff7d3c