brew install gh
登录:
gh auth login
切换到存储库目录并运行以下命令:
gh issue list --limit 1000 --state all | tr '\t' ',' > issues.csv
';'
,而不是逗号。您可以根据需要修改分隔符。gh issue list --limit 1000 --state all | tr '\t' ',' > my_issues.csv
的用法非常有用。 - Robgh
改变了我的生活。MAX_NUM=`gh issue list --limit 1 --json number | jq ".[].number"`; for n in `seq 1 $MAX_NUM`; do gh issue view $n --json assignees,author,body,closed,closedAt,comments,createdAt,id,labels,milestone,number,projectCards,reactionGroups,state,title,updatedAt,url >> github-dump.json; done
- John Lehmanngh issue list --limit 1000 --state all | tr ',' ' ' | tr '\t' ',' > issues.csv
- C C> issues.csv
- undefinedhttps://api.github.com/repos/<repo-owner>/<repo-name>/issues?state=all
会获取到所有问题。请注意,拉取请求也被视为问题,因此您也会得到它们。所有查询参数在这里。 - mbesso-i
标志?不使用该标志输出的JSON会更好吗? - mwagcurl -i https://api.github.com/repos/<repo-owner>/<repo-name>/issues --header "Authorization: token <token>"
。 - tom-james-watson$ hub issue -f "%t,%l%n" > list.csv
$ more issue.csv
Issue 1 title, tag1 tag2
Issue 2 title, tag3 tag2
Issue 3 title, tag1
hub issue -s all -d 2019-08-20 -o updated --include-pulls -f "%U|%t|%S|%cI|%uI|%L%n" > issues.csv
导出了所有自 2019 年 8 月 20 日更新的问题,包括拉取请求,并将它们作为分隔符为 "|" 的 csv 输出。 - Richard Jhub
时,不要将其重定向到 list.csv
,因为它可能会要求输入用户名和密码,看起来会卡住。 - Nick Agerhub issue -s all -f“%I%n”| xargs -I%sh -c'hub issue show%| dos2unix>%.md'
。这将为每个问题生成一个Markdown文件。dos2unix清理导出中的换行符。 - Christian Long{owner}
和{repo}
替换为实际值即可:
https://api.github.com/repos/{owner}/{repo}/issues?page=1&per_page=100
很遗憾,github.com没有让这个过程变得更容易。
同时,如果你有jq和curl,你可以使用类似以下示例的两行代码来输出问题编号、标题和标签,并且它也适用于私有仓库(如果你不想按标签筛选,只需删除url中的labels={label}&
部分)。你需要替换$owner、$repo、$label和$username:
# with personal access token = $PAT
echo "number, title, labels" > issues.csv
curl "https://api.github.com/repos/$owner/$repo/issues?labels=$label&page=1&per_page=100" -u "$username:$PAT" \
| jq -r '.[] | [.number, .title, (.labels|map(.name)|join("/"))]|@csv' >> issues.csv
# without PAT (will be prompted for password)
echo "number, title, labels" > issues.csv
curl "https://api.github.com/repos/$owner/$repo/issues?labels=$label&page=1&per_page=100" -u "$username" \
| jq -r '.[] | [.number, .title, (.labels|map(.name)|join("/"))]|@csv' >> issues.csv
-H "GitHub-OTP: XXXXXX"
- Adam Reis你也可以查看我创建的一行代码(它涉及到 GitHub CLI 和 jq
)
gh issue list --limit 10000 --state all --json number,title,assignees,state,url | jq -r '["number","title","assignees","state","url"], (.[] | [.number, .title, (.assignees | if .|length==0 then "Unassigned" elif .|length>1 then map(.login)|join(",") else .[].login end) , .state, .url]) | @tsv' > issues-$(date '+%Y-%m-%d').tsv
jq
集成,可以使用 --jq <expression>
通过 jq 表达式过滤 JSON 输出。详细信息请参阅 GitHub CLI 手册 https://cli.github.com/manual/gh_issue_list。 - JV conseil我尝试了其他评论中描述的将问题以JSON格式导出的方法。虽然它可以正常工作,但格式有些混乱。后来我在Excel帮助中发现它能够直接访问API并将数据从JSON响应中整洁地加载到我的Excel表格中。
我用于找到所需帮助的Google术语是“excel power query web.content GET json”。我找到了一段非常有帮助的How To Excel视频。
在Excel查询中有效的URL(与其他帖子相同):
https://api.github.com/repos/{owner}/{repo}/issues?page=1&per_page=100
个人而言,我也会添加参数&state=open,否则我需要请求数百页。曾经有一次,我达到了GitHub对于我的IP地址未认证API调用/小时的限制。
npm install -g https://github.com/mkobar/git-issues-downloader
然后使用(用于公共存储库)运行
git-issues-downloader -n -p none -u none https://github.com/<user>/<repository>
或者对于私有仓库:
git-issues-downloader -n -p <password or token> -u <user> https://github.com/<user>/<repository>
运行良好。
我已经花了相当长的时间来摸索这个问题,发现Power BI是一种很好的方法来保持电子表格中的数据更新。我必须稍微研究一下Power BI才能使其正常工作,因为从结构化JSON字段中获取正确的信息,并将列表折叠成连接字符串,特别是对于标签,这并不是非常直观的。但是,这个Power BI查询对我来说很有效,它能够消除所有噪音,并将相关信息以易于消化的格式呈现,可以与利益相关者进行审查:
let
MyJsonRecord = Json.Document(Web.Contents("https://api.github.com/repos/<your org>/<your repo>/issues?&per_page=100&page=1&state=open&filter=all", [Headers=[Authorization="Basic <your auth token>", Accept="application/vnd.github.symmetra-preview+json"]])),
MyJsonTable = Table.FromRecords(MyJsonRecord),
#"Column selection" = Table.SelectColumns(MyJsonTable,{"number", "title", "user", "labels", "state", "assignee", "assignees", "comments", "created_at", "updated_at", "closed_at", "body"}),
#"Expanded labels" = Table.ExpandListColumn(#"Column selection", "labels"),
#"Expanded labels1" = Table.ExpandRecordColumn(#"Expanded labels", "labels", {"name"}, {"labels.name"}),
#"Grouped Rows" = Table.Group(#"Expanded labels1", {"number","title", "user", "state", "assignee", "assignees", "comments", "created_at", "updated_at", "closed_at", "body"}, {{"Label", each Text.Combine([labels.name],","), type text}}),
#"Removed Other Columns" = Table.SelectColumns(#"Grouped Rows",{"number", "title", "state", "assignee", "comments", "created_at", "updated_at", "closed_at", "body", "Label"}),
#"Expanded assignee" = Table.ExpandRecordColumn(#"Removed Other Columns", "assignee", {"login"}, {"assignee.login"})
in
#"Expanded assignee"
在这个查询中,我添加了然后删除了一些列,没有清理干净 - 在使用之前请随意进行清理。显然,您还需要将自己的组织名称和存储库名称填入URL中,并获取授权令牌。我已经使用Chrome REST插件测试了该URL,并从那里输入用户和API密钥获取了令牌。如果您不想处理令牌,则可以使用用户和密钥明确进行身份验证。我只是觉得在查询设置中走匿名路线并提供已格式化的请求头更简单。
此外,这适用于具有最多100个未解决问题的存储库。如果您拥有更多,则需要复制查询(第2页等)并合并结果。
使用此查询的步骤:
#"Changed Type" = Table.TransformColumnTypes(#"Expanded assignee",{{"created_at", type datetime}, {"updated_at", type datetime}, {"closed_at", type datetime}})
- Robin Wilson