git clone S3错误:403禁止

时间:2016-01-01 06:50:44

标签: git amazon-s3

我希望能够将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.

有谁知道我错过了什么?

3 个答案:

答案 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