【问题标题】:How can I export GitHub issues to Excel?如何将 GitHub 问题导出到 Excel?
【发布时间】:2017-05-13 04:02:49
【问题描述】:

如何将我的所有问题从 Enterprise GitHub 存储库导出到 Excel 文件?我试过搜索许多 Stack Overflow 的答案,但没有成功。我也尝试过这个解决方案(exporting Git issues to CSV 并收到“ImportError: No module named requests”错误。是否有任何工具或任何简单的方法可以将所有问题导出到 Excel?

【问题讨论】:

  • 您将需要使用 API 来迭代您要为其导出数据的每个存储库。我建议使用 ruby​​ octokit 作为与 GitHub 交互的快速方式。除非您可以添加更多代码或您尝试过的细节,否则这个问题可能会被否决。

标签: excel github github-api github-enterprise


【解决方案1】:

要使用 curl 从私有仓库导出,您可以运行以下命令:

curl -i https://api.github.com/repos/<repo-owner>/<repo-name>/issues --header "Authorization: token <token>" 

令牌可以在Personal access tokens下生成

查看API description 了解所有详细信息。

【讨论】:

  • https://api.github.com/repos/&lt;repo-owner&gt;/&lt;repo-name&gt;/issues?state=all将为您解决所有问题。请注意,拉取请求也被视为问题,因此您也会得到这些。所有查询参数均为here
  • 为什么是-i 标志?如果没有这样你的输出只是 json 会不会更好?
  • 密码验证将被弃用:developer.github.com/changes/…
  • 如果您有两因素身份验证设置,有什么问题吗?
  • 如前所述,这已被弃用,如果您启用了 2FA,则该方法不起作用。正确的做法是在github.com/settings/tokens 创建一个个人访问令牌,然后将该值作为标头传递:curl -i https://api.github.com/repos/&lt;repo-owner&gt;/&lt;repo-name&gt;/issues --header "Authorization: token &lt;token&gt;"
【解决方案2】:

github 的hub 命令行包装器使这变得非常简单。

你可以这样做:

$ 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" &gt; issues.csv 导出了自 2019-08-20 以来更新的所有问题,包括拉取请求,并将它们输出为“|”分隔的 csv。
  • 同意这是一个很好的方法。我最初不清楚的是:1)在包含感兴趣的克隆存储库的文件夹中运行命令。 2) 不要在第一次运行hub 时重定向到list.csv,因为它可能会要求输入用户名和密码,所以看起来会挂起。
  • 如果您想要获取每个问题的所有 cmets 并保留格式,而不是 CSV:hub issue -s all -f "%I%n" | xargs -I % sh -c 'hub issue show % | dos2unix &gt; %.md'。这会为每个问题生成一个降价文件。 dos2unix 清除导出中的换行符。
【解决方案3】:

使用官方GitHub CLI,您可以轻松地将所有问题导出为 CSV 格式。

brew install gh

登录:

gh auth login

将目录更改为存储库并运行以下命令:

gh issue list --limit 1000 --state all | tr '\t' ',' > issues.csv

在欧洲 .csv 文件中,分隔符是分号 ';',而不是逗号。根据需要修改分隔符。

【讨论】:

  • 这对我很有帮助,虽然默认的 csv 使用逗号分隔符,并且显示将输出发送到文件 gh issue list --limit 1000 --state all | tr '\t' ',' &gt; my_issues.csv 的用法很有用
  • Tks。非常好!注意:对我来说,要在 MacOS 上的 Excel 上正确打开 CSV,我将“,”替换为“;”在脚本行上。
  • 谢谢。 gh 刚刚改变了我的生活。 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 &gt;&gt; github-dump.json; done
  • 谢谢;美国 Excel 在这里...我有一个更干净的 csv:gh issue list --limit 1000 --state all | tr ',' ' ' | tr '\t' ',' &gt; issues.csv
【解决方案4】:

如果这是一次性任务,您可以使用GitHub WebAPI。它允许以 JSON 格式导出问题。然后您可以将其转换为 Excel(例如,使用一些 online converter)。

只需在浏览器中打开以下 URL,用实际值替换 {owner}{repo}

https://api.github.com/repos/{owner}/{repo}/issues?page=1&amp;per_page=100

【讨论】:

  • 试试这个,它只适用于公共存储库(为私有存储库提供“未找到”错误)。它也不包括 cmets,但它确实告诉您有多少 cmets。
  • @Jason 你有没有办法同时下载 cmets 及其附件?
  • @NicolasMaltais cmets 也可以通过 APi 获得,因此会有一个端点(详情请点击此处developer.github.com/v3/issues/comments)。附件都是使用降价标签引用的,因此您需要解析这些以获取附件的 URL,并单独下载它们。如果您在其他地方重建问题和 cmets,那么您可能需要修改这些 URL 以指向您的新附件存储。
【解决方案5】:

不幸的是 github.com 并没有让这变得更容易。

同时,如果您有 jq 和 curl,您可以使用类似以下示例的内容分两行执行此操作,该示例输出问题编号、标题和标签(标签),并且也适用于私有存储库(如果您没有'不想按标签过滤,只需删除网址的labels={label}&amp; 部分)。您需要替换 $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

请注意,如果您的数据超过 1 页,则可能需要额外调用。

【讨论】:

  • 要添加您的 OTP,只需在 curl 请求中添加一个标头,如下所示:-H "GitHub-OTP: XXXXXX"
  • 这个命令是否可以扩展为也获取每个问题的正文?
  • 我刚才尝试这个的时候,github 给我发了邮件:你最近使用密码通过 GitHub API 使用 curl/7.35.0 访问端点。我们将很快弃用使用此端点的密码进行基本身份验证:...我们建议使用具有适当范围的个人访问令牌 (PAT) 来访问此端点。访问github.com/settings/tokens了解更多信息。
  • 谢谢!我已经更新了答案,还提供了使用 PAT 时的语法
  • @CamilleGoudeseune 假设当您说“body”时,您的意思是与问题相关的 cmets,为了获取,必须进一步扩展命令,以便每个条目都对 github 进行额外调用为每个问题获取 cmets 的 API,例如如developer.github.com/v3/issues/comments/… 所述
【解决方案6】:

我尝试了其他 cmets 中描述的有关以 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,不然需要请求上百页。在某一时刻,我的 IP 地址达到了 GitHub 对未经身份验证的 API 调用/小时的限制。

【讨论】:

    【解决方案7】:

    您也可以尝试https://github.com/remoteorigin/git-issues-downloader,但请务必使用开发分支。 npm 版本和 master 分支有问题。

    或者你可以使用这个补丁版本

    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>
    

    效果很好。

    【讨论】:

    • 不支持 2020 年 2 月 2FA :(
    【解决方案8】:

    这里有一个工具可以帮您完成(使用 GitHub API): https://github.com/gavinr/github-csv-tools

    【讨论】:

      【解决方案9】:

      我已经对此进行了相当长的修改,发现 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 中填写您自己的组织名称和 repo 名称,并获取 auth 令牌。我已经使用 Chrome REST 插件测试了 URL,并通过在那里输入用户和 api 密钥获得了令牌。如果您不想处理令牌,可以使用用户和密钥从 Excel 显式验证。我只是发现在查询设置中使用匿名路由更简单,而是提供易于格式化的请求标头。

      此外,这适用于最多包含 100 个未解决问题的存储库。如果您有更多,则需要复制查询(对于第 2 页等)并合并结果。

      使用此查询的步骤:

      • 在新工作表的“数据”选项卡上,打开“获取数据”下拉菜单
      • 选择“启动 Power Query 编辑器”
      • 在编辑器中,选择“新建查询”、“其他来源”、“空白查询”
      • 现在您点击“高级编辑器”并粘贴上述查询
      • 点击高级编辑器上的“完成”按钮,然后从工具栏中点击“关闭并加载”
      • 问题正在加载到您的电子表格中,您正在开展业务
      • 不需要糟糕的第三方工具

      【讨论】:

      • 我无法让它与授权标头一起使用,但取出该标头并将我的用户名和 PAT 令牌放入数据源设置 > 编辑权限 > 访问的“基本”部分网页内容对话框。
      • Github 文档中的标准接受头现在是“application/vnd.github.v3+json”
      【解决方案10】:

      Export Pull Requests 可以将问题导出到 CSV 文件,该文件可以用 Excel 打开。它还支持 GitLab 和 Bitbucket。

      来自其文档:

      在 sshaw/git-link 和 sshaw/itunes_store_transporter:

      epr sshaw/git-link sshaw/itunes_store_transporter > pr.csv

      导出不是由 sshaw 在 padrino/padrino-framework 中创建的开放拉取请求:

      epr -x pr -c '!sshaw' padrino/padrino-framework > pr.csv

      它有几个用于过滤导出内容的选项。

      【讨论】:

        【解决方案11】:

        可以使用 Power Query 直接在 Excel 中查询 GitHub 的 JSON API。它确实需要一些关于如何将 JSON 转换为 Excel 表格格式的知识,但这在谷歌上是相当容易的。

        这是首先获取数据的方法:

        • 在 Excel 的功能区上,单击数据 > 获取数据 > 从 JSON。在对话框中 框,输入 API URL ... 格式类似于(根据需要添加参数): https://api.github.com/repos/{owner}/{repo}/issues

        • 将出现一个标有“访问 Web 内容”的对话框。

        • 在左侧,单击“基本”选项卡。

        • 在用户名文本框中,输入您的 GitHub 用户名。

        • 在密码文本框中,输入 GitHub 密码/个人访问权限 令牌。

        • 点击连接。

        • Power Query 编辑器将显示一个包含记录的项目列表。

        ...现在谷歌搜索如何进行相应的转换,以便可以将适当的问题数据显示为单个表格。

        【讨论】:

          【解决方案12】:

          作为一项一次性任务,在已安装 GitBash 提示符的 Windows 系统上构建来自 @Chip... 的基于“集线器”的建议:

          1. 下载最新的hub可执行文件(如Windows 64位)https://github.com/github/hub/releases/并解压(hub.exe在.../bin目录下)。

          2. 创建一个 github 个人访问令牌https://github.com/settings/tokens 并将令牌文本字符串复制到剪贴板。

          3. 创建一个文本文件(例如在记事本中)用作 hub.exe 的输入文件...第一行是您的 github 用户名,第二行粘贴个人访问令牌,然后是换行符 (这样当输入到集线器时,两条线都会被处理)。这里我假设该文件是存储库基目录中的 infile.txt。

          4. 运行 Git Bash... 并记住 cd(更改目录)到感兴趣的存储库!然后输入如下一行:

            /bin/hub.exe issue -s all -f "%U|%t|%S|%cI|%uI|%L%n" outfile.csv

          5. 然后用'|'打开文件作为列分隔符。 (并考虑删除 github 上的个人访问令牌)。

          【讨论】:

            猜你喜欢
            • 2015-07-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多