【问题标题】:Get a single file from a remote mercurial repository从远程 mercurial 存储库中获取单个文件
【发布时间】:2011-02-19 21:26:25
【问题描述】:

有没有办法用 Java 以编程方式从远程 Mercurial 存储库下载单个文件?我问了very similar question regarding git;现在我希望我也可以用 mercurial 做类似的事情。

  1. 我更喜欢使用尽可能少的带宽的解决方案,最好只下载单个文件。我不需要浏览存储库,我已经有了文件的路径。
  2. 我不关心文件的历史,我只想要它的最新版本。
  3. 当然,仅将文件打印到输出的解决方案也很棒 - 它实际上不必将文件保存到磁盘,我可以自己完成。
  4. 我更喜欢不依赖于其他应用程序的解决方案(例如,在机器上安装 mercurial 客户端)。包含 mercurial 客户端实现本身的 Java 库将是最佳选择。不过,如果没有其他方法,我会很乐意调用hg。

根据我对 Mercurial 工作原理的了解 - 只允许针对本地存储库工作 - 这可能被证明是有问题的;但由于我能够使用类似的 Git SCM 做到这一点,我希望 Mercurial 也有解决方案。

【问题讨论】:

    标签: java mercurial


    【解决方案1】:

    mercurial wire protocol 没有从远程存储库读取单个文件的命令。这就是为什么hg 命令行客户端也不能这样做的原因。这个想法是你应该总是为这些东西做一个本地克隆。

    但是,mercurial 的各种 Web 界面通常都有获取文件内容的方法。例如,对于 bitbucket 存储库,URL 如下所示:

    http://bitbucket.org/<user>/<project>/raw/<revision>/<filename>
    

    对于hg serve Web 界面,URL 如下所示:

    http://<host>:<port>/raw-file/<revision>/<filename>
    

    【讨论】:

    • 此外,如果您需要访问 bitbucket 上的私有 repo,他们还有一个 api:confluence.atlassian.com/display/BITBUCKET/…
    • 对于hg server Web 界面,您不需要知道修订版。您可以使用tip 代替修订号。
    【解决方案2】:

    Bitbucket REST API 是您想要的工具。

    https://api.bitbucket/1.0/repositories/{USER}/{REPO-NAME}/raw/tip/{PATH/TO/FILE}

    来自他们docs的示例:

    您可以获取原始文件,而不是将文件格式化为 JSON 文件:

    $ 卷曲 https://api.bitbucket.org/1.0/repositories/jespern/django-piston/raw/tip/piston/utils.py 从 django.http 导入 HttpResponseNotAllowed 的导入时间, HttpResponseForbidden、HttpResponse、HttpResponseBadRequest 来自 django.core....

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 2018-01-02
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多