如何在Stash或Bitbucket中提取所有存储库的列表?

Jee*_*eel 7 rest repository bitbucket bitbucket-server

我需要在Bitbucket的所有项目中提取所有repos的列表.是否有相同的REST API?我找不到一个.

我有内部部署和云Bitbucket.

Jas*_*ier 7

克隆给定存储网址的所有项目和存储库

    #!/usr/bin/python
    # 
    # @author Jason LeMonier
    #
    # Clone ALL Projects & Repositories for a given stash url
    #
    # Loop through all projects: [P1, P2, ...]
    #    P1 > for each project make a directory with the key "P1"
    #    Then clone every repository inside of directory P1
    #    Backup a directory, create P2, ... 
    # 
    # Added ACTION_FLAG bit so the same logic can run fetch --all on every repository and/or clone.

    import sys
    import os
    import stashy

    ACTION_FLAG = 1     # Bit: +1=Clone, +2=fetch --all 

    url  = os.environ["STASH_URL"]  # "https://mystash.com/stash"
    user = os.environ["STASH_USER"] # joedoe"
    pwd  = os.environ["STASH_PWD"]  # Yay123

    stash = stashy.connect(url, user, pwd)

    def mkdir(xdir):
        if not os.path.exists(xdir):
            os.makedirs(xdir)

    def run_cmd(cmd):
        print ("Directory cwd: %s "%(os.getcwd() ))
        print ("Running Command: \n    %s " %(cmd))
        os.system(cmd)

    start_dir = os.getcwd()

    for project in stash.projects:
        pk = project_key = project["key"]
        mkdir(pk) 
        os.chdir(pk)

        for repo in stash.projects[project_key].repos.list():
            for url in repo["links"]["clone"]:
                href = url["href"]
                repo_dir = href.split("/")[-1].split(".")[0]

                if (url["name"] == "http"):
                    print ("        url.href: %s"% href)  # https://joedoe@mystash.com/stash/scm/app/ae.git
                    print ("Directory cwd: %s Project: %s"%(os.getcwd(), pk))

                    if ACTION_FLAG & 1 > 0:
                        if not os.path.exists(repo_dir):
                            run_cmd("git clone %s" % url["href"])
                        else:
                            print ("Directory: %s/%s exists already.  Skipping clone. "%(os.getcwd(), repo_dir))

                    if ACTION_FLAG & 2 > 0:
                        # chdir into directory "ae" based on url of this repo, fetch, chdir back
                        cur_dir = os.getcwd()
                        os.chdir(repo_dir)
                        run_cmd("git fetch --all ")
                        os.chdir(cur_dir)

                    break

        os.chdir(start_dir) # avoiding ".." in case of incorrect git directories
Run Code Online (Sandbox Code Playgroud)

  • 这太酷了,我可能有一天会使用它。但它没有回答这个问题,“我如何_list_Bitbucket 中的所有存储库?” 克隆所有存储库以获取它们的列表将耗费大量时间和空间。 (4认同)

jlo*_*jlo 7

  1. 登录后:在右上角,单击您的个人资料图片,然后单击“查看个人资料”

在此输入图像描述

  1. 记下您的用户(在下面的示例中为“YourEmail@domain.com”,但请记住它区分大小写)

在此输入图像描述

  1. 单击个人资料图片 > 管理帐户 > 个人访问令牌 > 创建令牌(选择“读取”访问类型足以实现此功能)

对于所有项目:

  1. 打开 CLI 并使用以下命令(请记住填写您的服务器域!):
curl -u "YourEmail@domain.com" -X GET https://<my_server_domain>/rest/api/1.0/projects/?limit=1000
Run Code Online (Sandbox Code Playgroud)
  1. 它会要求您提供个人访问令牌,您同意后您将获得一个包含所有请求的存储库的 JSON 文件

对于给定项目中的所有存储库:

  1. 选择您想要从中获取存储库的项目。就我而言,项目 URL 为:<your_server_domain>/projects/TECH/,因此我的 {projectKey} 为“TECH”,您将需要它来执行以下命令。

  2. 打开 CLI 并使用此命令(请记住填写您的服务器域和项目密钥!):

curl -u "YourEmail@domain.com" -X GET https://<my_server_domain>/rest/api/1.0/projects/{projectKey}/repos?limit=50
Run Code Online (Sandbox Code Playgroud)

最后的润色

  1. (可选)如果您只需要所请求的存储库的标题并且已安装jq(对于 Windows,下载 exe 并将其添加到 PATH 应该足够了,但您需要重新启动 CLI 才能检测到新添加的内容),你可以使用下面的命令:
curl -u $BBUSER -X GET <my_server_domain>/rest/api/1.0/projects/TECH/repos?limit=50 | jq '.values|.[]|.name'
Run Code Online (Sandbox Code Playgroud)

(使用 Data Center/Atlassian Bitbucket v7.9.0 和 powershell CLI 进行测试)


Har*_*dic 4

对于 Bitbucket 云

您可以使用他们的 REST API 来访问您的服务器并执行查询。

具体来说,您可以使用Atlassian 提供的此文档页面来了解如何列出您的存储库。


对于 Bitbucket 服务器

编辑:从 Dan Bennett收到这条推文时,我了解到 Bitbucket Server 有一个 API/插件系统可以满足您的需求。对于文档:请参阅此处。

Edit2:找到了列出可以作为解决方案的个人存储库的参考。

AFAIK,除非您为自己构建一个与 Bitbucket Server 实例交互的小 API,否则没有适合您的解决方案。

Atlassian 文档确实表明要列出您可以执行的所有当前配置的存储库git remote -v。然而我对此表示怀疑,因为这不是通常的git remote -v使用方式;我认为更可能的是 Atlassian 的文档不清楚,而不是 Atlassian 将此功能构建到 Bitbucket Server 中。