【问题标题】:How do I remove all stale branches from Github?如何从 Github 中删除所有陈旧的分支?
【发布时间】:2016-12-28 04:18:02
【问题描述】:

我们有很多不活跃的分支(最新的是 7 个月大,最早的是两年前)。
如果还没有 PR 对它们开放,我想从远程中批量删除所有这些分支。

我应该使用 Github 的 API 吗?我是否应该像this StackOverflow question 中提供的那样通过 sn-ps 使用 git?
是否有一些我不熟悉的 Github 功能可以帮助组织我们的存储库?

【问题讨论】:

  • 我很想在 Github 中有这个功能。当你 fork 一个包含 100 多个分支的 repo 时,这简直是一团糟。

标签: git github github-api


【解决方案1】:

您当然可以使用 GitHub API 来实现这一点,但您需要花点功夫才能做到这一点。

首先,使用list pull requests API 获取打开的拉取请求列表。此列表中的每个项目都包含一个 ["head"]["ref"] 条目,它将是一个分支的名称。

现在,使用get all references API,列出存储库中的所有引用。请注意,Git 数据 API 中的分支语法与从拉取请求 API 返回的语法略有不同(例如 refs/heads/topictopic),因此您必须对此进行补偿。除非您只搜索 refs/heads/ 子命名空间,否则引用 API 也会返回标签,如文档中所述,因此请注意这一点。

一旦您有了这两个分支引用列表,就很容易确定哪些分支没有打开的拉取请求(不要忘记说明master 或您希望保留的任何其他分支!)。

此时,您可以使用delete reference API 从存储库中删除这些分支引用。

【讨论】:

【解决方案2】:

对于2021 Github的网页,你可以在打开陈旧的分支后在浏览器上右键,在浏览器java脚本控制台中运行。


 var stale_branches = document.getElementsByClassName('color-text-danger');
 for (var i = 0; i < stale_branches.length; i++) {
 stale_branches.item(i).click();
 }

或正如@MartinNowak 所建议的那样

document.querySelectorAll('button[data-target="branch-filter-item.destroyButton"]').forEach(btn => btn.click())

【讨论】:

  • 这很酷,有什么办法只对合并的人这样做?
  • 您可以自动执行此操作 -> docs.github.com/en/repositories/…
  • document.querySelectorAll('button[data-target="branch-filter-item.destroyButton"]').forEach(btn =&gt; btn.click())
猜你喜欢
  • 2021-08-01
  • 2021-06-21
  • 2012-05-06
  • 2013-05-23
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2021-12-11
  • 2013-07-02
相关资源
最近更新 更多