Jee*_*eel 7 rest repository bitbucket bitbucket-server
我需要在Bitbucket的所有项目中提取所有repos的列表.是否有相同的REST API?我找不到一个.
我有内部部署和云Bitbucket.
克隆给定存储网址的所有项目和存储库
#!/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)
对于所有项目:
curl -u "YourEmail@domain.com" -X GET https://<my_server_domain>/rest/api/1.0/projects/?limit=1000
Run Code Online (Sandbox Code Playgroud)
对于给定项目中的所有存储库:
选择您想要从中获取存储库的项目。就我而言,项目 URL 为:<your_server_domain>/projects/TECH/,因此我的 {projectKey} 为“TECH”,您将需要它来执行以下命令。
打开 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)
最后的润色
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 进行测试)
对于 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 中。