如何在BitBucket中访问旧提交的完整源代码?


226

我找不到或找不到有关如何以新的Bit Bucket格式访问旧提交源的文档。这有可能吗?


1
什么新格式?您正在使用Mercurial还是Git?只需使用Mercurial或Git客户端即可更新到旧版本。
Erno 2013年

Answers:


369

我了解您想通过BitBucket Web界面下载旧版本,而不使用Mercurial / Git客户端。

检查此相关问题。关于评论,有人说没有办法。幸运的是,这并不完全正确。

通过在BitBucket项目页面上导航,我没有找到下载任意版本的链接。有用于下载特定标签的链接,格式为:

https://bitbucket.org/owner/repository/get/v0.1.2.tar.gz

但是通过稍微调整上面的URL,通过提交哈希来更改标签名称,例如:

https://bitbucket.org/owner/repository/get/A0B1C2D.tar.gz

您实际上可以下载特定版本。

正如Rakka Rage在评论中提到的那样,也.tar.gz.zip作品取代。


我可以在Android Studio终端中使用上面的链接来克隆提交吗?如果可以,您能否提供基本的终端代码?
tccpg288 '16

1
我希望他们能在他们的网站上显示它,这样很明显。
轧辊

1
为什么不相关?我刚刚再次对其进行了测试(2018-08-06),它仍然有效。也许是“内部” BitBucket服务器的问题?我在bitbucket.org服务器上对此进行了测试。
鲁迪·马特拉

应该是api.bitbucket.org现在
Alexander Mills

1
可以确认它仍然可以正常使用bitbucket.org
-Vely

202

我试图找出是否有可能像在GitHub上那样浏览早期提交的代码,并将它带到这里。我使用了在这里找到的信息,并且在摆弄了URL之后,实际上还找到了一种浏览旧提交代码的方法。

当您浏览代码时,URL类似于:

https://bitbucket.org/user/repo/src/

并在末尾添加提交哈希,如下所示:

https://bitbucket.org/user/repo/src/a0328cb

您可以在提交时浏览代码。我不明白为什么没有下拉框直接选择提交,该功能已经存在。奇怪。


2
这正是我所需要的。从Bitbucket站点到此URL的直接链接丢失了。
约翰尼·奥希卡

las,这行不通。或更确切地说,只是部分地工作。例如,您可以浏览,https://bitbucket.org/lyro/evil/src/8cbfd51但如果输入hg clone https://bitbucket.org/lyro/evil/src/8cbfd51,则会得到一些随机修订,也许是最新修订。
Hi-Angel

找到了解决方法,这是hg clone -r8cbfd51 https://bitbucket.org/lyro/evil/src/
Hi-Angel

3
对于那些不喜欢复制+粘贴的用户:浏览到某个提交,U​​RL将类似于https://bitbucket.org/user/project/commits/0000000000000000000000000000000000000000?at=master。现在,只需commits将URL 更改为src,您就可以在此提交中浏览完整的源代码!
彼得

176

第1步

第1步


第2步

第2步


第三步

第三步


第4步

第4步


最后一步

最后一步


2
@ManojG这是我的一个。因此,显然有一种方法可以在某个提交时进入整个树,尽管这是一种相当混乱的方式。
马尔科姆

2
爱这个答案。注意:您也可以转到文件并使用下拉菜单。谢谢!
mattdlockyer

3
比这个答案更令人惊讶的是,我们不能这样做的一个按钮点击...有些事情是真是太神奇了....
努诺·贡萨尔维斯

这一步也没有解决对我来说,什么都给结果:从@mattdlockyer答案,选择一个文件,点击下拉菜单,选择一个较旧的提交,然后返回到像奥斯卡后的最后一张图像回购基连接
user2582318

1
所有这些都有效,但下载时始终是最新提交。我是做错了还是那样?
杰·梅塔

29

以防万一有人在我的船上而这些答案都不起作用,这就是我所做的。

也许我们内部的Bitbucket服务器的设置与大多数服务器有所不同,但这是我通常用来查看master分支中文件的URL:

https://<BITBUCKET_URL>/projects/<PROJECT_GROUP>/repos/<REPO_NAME>/browse

如果从下拉菜单中选择与主分支不同的分支,则会得到以下信息:

https://<BITBUCKET_URL>/projects/<PROJECT_GROUP>/repos/<REPO_NAME>/browse?at=refs%2Fheads%2F<BRANCH_NAME>

所以我尝试这样做,它的工作原理是:

https://<BITBUCKET_URL>/projects/<PROJECT_GROUP>/repos/<REPO_NAME>/browse?at=<COMMIT_ID>

现在,我可以浏览提交时的整个存储库。


6
该答案是唯一实际可行的答案。较受欢迎的似乎是指旧版本的到位桶
克拉斯Mellbourn

9

几年前的好答案。现在,Bitbucket使它变得更容易。

标记要下载的提交(如Rudy Matela的回答所述)。

然后转到下载,然后单击“标签”标签,您将获得多个下载选项。

标签下载


1
这很容易成为最简单的方法。对于那些无法获取标签问题的用户,请单击特定的提交,然后在右上角您将查看源代码,分支,提交和标签。在此处添加标签,然后下载。
PGMacDesign '18

8

作为记录,您还可以通过以下方式伪造URL:

当浏览最新的资源时,您会看到类似: https://bitbucket.org/my/repo/src/latestcommithash/my.file?at=master

只需更改提交哈希并删除GET参数: https://bitbucket.org/my/repo/src/wantedcommithash/my.file

上面的+1 @Hein A.Grønnestad:一切正常,真的很奇怪为什么GUI中没有任何东西可以使用它。



1

您可以通过添加?until=<sha-of-commit>URL(在文件名之后)来查看文件的来源,直到特定的提交为止 。


1

我知道为时已晚,但是使用API​​ 2.0,您可以

从命令行使用:

curl https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<branch>/<path_file>

或在php中使用:

$data = json_decode(file_get_contents("https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<branch>/<path_file>", true));

那么您就拥有了文件的历史记录(从最近的提交到最早的提交):

{
"pagelen": 50,
"values": [
    {
      "links": {
        "self": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<hash>/<path_file>"
        },
        "meta": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<HEAD>/<path_file>?format=meta"
        },
        "history": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<HEAD>/<path_file>"
        }
      },
      "commit": {
        "hash": "<HEAD>",
        "type": "commit",
        "links": {
          "self": {
            "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/commit/<HEAD>"
          },
          "html": {
            "href": "https://bitbucket.org/<user>/<repo>/commits/<HEAD>"
          }
        }
      },
      "attributes": [],
      "path": "<path_file>",
      "type": "commit_file",
      "size": 31
    },
    {
      "links": {
        "self": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<HEAD~1>/<path_file>"
        },
        "meta": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/src/<HEAD~1>/<path_file>?format=meta"
        },
        "history": {
          "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<HEAD~1>/<path_file>"
        }
      },
      "commit": {
        "hash": "<HEAD~1>",
        "type": "commit",
        "links": {
          "self": {
            "href": "https://api.bitbucket.org/2.0/repositories/<user>/<repo>/commit/<HEAD~1>"
          },
          "html": {
            "href": "https://bitbucket.org/<user>/<repo>/commits/<HEAD~1>"
          }
        }
      },
      "attributes": [],
      "path": "<path_file>",
      "type": "commit_file",
      "size": 20
    }
  ],
  "page": 1
}

其中values> links> self提供在历史的时刻,你可以检索的文件curl <link>file_get_contents(<link>)

最终,您可以从命令行使用以下内容进行过滤:

 curl https://api.bitbucket.org/2.0/repositories/<user>/<repo>/filehistory/<branch>/<path_file>?fields=values.links.self

在php中,只需foreach在array上循环即可$data

注意:如果<path_file>/,则必须将其转换为%2F

在此处查看文档:https : //developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/filehistory/%7Bnode%7D/%7Bpath%7D

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.