使用http身份验证下载私有BitBucket存储库zip文件

时间:2013-07-16 16:32:12

标签: git http bitbucket

我正在编写一个脚本来轻松部署应用程序。应用程序的代码存储在私有BitBucket存储库中。

我希望能够下载提交的zip文件。我尝试使用以下代码进行身份验证:

https://user:pass@bitbucket.org/user/repo/get/commit.zip

但是,它没有完成任务,而是重定向到BitBucket上的登录页面。

7 个答案:

答案 0 :(得分:33)

就个人而言,我并不想将密码放入我的脚本中来实现这一目标。所以诀窍是在将你的公钥添加到你的bitbucket帐户后运行以下命令:

git archive --remote=ssh://git@bitbucket.org/your_bitbucket_username/your_repository.git --format=zip --output="name_of_your_desired_zip_file.zip" master

我的系统上有多个键,如果你也这样做,你需要在〜/ .ssh目录中创建一个配置文件,指定使用特定键进行bitbucket连接。

<强>的〜/ .ssh /配置

Host bitbucket.org
  StrictHostKeyChecking no
  IdentityFile /home/me/.ssh/my_private_key

答案 1 :(得分:28)

要从命令行下载私有 Bitbucket存储库的压缩副本,请使用以下命令:

curl --digest --user <username>:<password> https://bitbucket.org/<username>/<repository>/get/<branchname>.zip -o <branchname>.zip

其中<username><password>是Bitbucket帐户名和密码,<repository>是回购名称,<branchname>是分支。如果您更愿意下载特定提交,请使用提交的SHA-1哈希代替<branchname>.

--digest标记是为了您的安全,强烈推荐。它完成身份验证,因此您的用户名和密码以明文形式发送。 -o标志将curl命令的输出作为文件发送到磁盘,而不是通过终端屏幕流式传输。

注意: Bitbucket的身份验证方案与wget.不兼容这就是您必须使用curl.

的原因

对于 public Bitbucket存储库,命令为:

curl https://bitbucket.org/<username>/<repository>/get/<branchname>.zip -o <branchname>.zip

或者,您可以将wget用于公共存储库,因为不需要身份验证:

wget https://bitbucket.org/<username>/<repository>/get/<branchname>.zip

.zip格式外,您还可以下载.gz.bz2种类的存储库。只需使用.zip.gz替换上面代码中的.bz2,即可以您选择的压缩格式下载存储库。

答案 2 :(得分:11)

  

--digest标志是为了您的安全,强烈建议。它完成身份验证,因此您的用户名和密码不会以明文形式发送。

这不是真的。

Bitbucket专门使用TLS,因此在任何时候都不会以明文形式通过电线。因此,Digest与Basic Auth相比没有任何好处。实际上,考虑到Digest是服务器启动的,您需要额外的服务器往返请求服务器提供的nonce。

自从几年前我们停止提供未加密的HTTP访问以来,我们对Digest的使用一直是多余的,因为@GrowlTiger建议使用基于卷曲的脚本执行--digest

事实上,我们即将在5月1日完全关闭Digest,之后curl --digest将停止工作。

可以找到更多信息:https://blog.bitbucket.org/2015/04/03/fare-thee-well-digest-access-authentication/

答案 3 :(得分:6)

对于那些想要在bitbucket上从私人仓库下载单个文件的人,我已经尝试了上述但没有工作。最后,我使用以下命令:

wget --user=<user> --password=<password> https://bitbucket.org/<user>/<repo>/raw/master/<filename>

答案 4 :(得分:2)

GrowlTigers的答案很棒,只是一个更新:使用wget它现在似乎也有效:

wget --user=<username> --password='<password>' https://bitbucket.org/<user>/<repo>/get/<filename>.tar.gz

答案 5 :(得分:1)

您使用的工具是否支持网址中的基本身份验证凭据? Curl request with digest auth in PHP for download Bitbucket private repository强烈暗示:

curl --user user:pass https://bitbucket.org/user/repo/get/commit.zip >commit.zip

作品。

答案 6 :(得分:0)

我发现这在Bitbucket的较新版本中有效

repository_list=" a b c"
for repository in ${repository_list}
do
    echo "Getting: ${repository}"
    curl --user userid:password \
         http://bitjira.xxx.com:7990/rest/api/latest/projects/WP/repos/${repository}/archive?format=zip  \
         -o ${repository}.zip
done