如何从Github中删除所有陈旧的分支?

the*_*row 6 git github github-api

我们有很多不活跃的分支机构(最新的是7个月,最早的是两年前).
如果没有为他们打开PR,我想从远程批量删除所有这些分支.

我应该使用Github的API吗?我是否应该使用git使用此StackOverflow问题中提供的代码段?
是否有一些我不熟悉的Github功能可以帮助组织我们的存储库?

Sur*_*rya 39

您可以在打开陈旧分支后右键单击浏览器,然后在浏览器 java 脚本控制台中运行它。

删除所有陈旧的分支。即)此脚本自动单击到下一页并继续删除下一页中的过时分支。

async function deleteStaleBranches(delay=500) {     
    var stale_branches = document.querySelectorAll('[aria-label="Delete branch"]');
        for (var i = 0; i < stale_branches.length; i++)     {  
          stale_branches.item(i).click();
          await new Promise(r => setTimeout(r, delay));     
        }     
        const next = document.querySelector('[aria-label="Next Page"]');
        if(next) {         
            next.click();
            setTimeout(() => deleteStaleBranches(500), 500);
        } 
}  (() => { deleteStaleBranches(500); })();
Run Code Online (Sandbox Code Playgroud)

仅删除当前页面中存在的过时分支

async function deleteStaleBranches(delay=500) {     
    var stale_branches = document.querySelectorAll('[aria-label="Delete branch"]');
        for (var i = 0; i < stale_branches.length; i++)     {  
          stale_branches.item(i).click();
          await new Promise(r => setTimeout(r, delay));     
        }     
        
}  (() => { deleteStaleBranches(500); })();

Run Code Online (Sandbox Code Playgroud)

  • 2022,需要更新选择器并添加延迟: `var stale_branches = document.getElementsByClassName('js-branch-delete-button'); for (var i = 0; i &lt; stale_branches.length; i++) { stale_branches.item(i).click(); 等待新的 Promise(r =&gt; setTimeout(r, 500)); }` (3认同)
  • @LunaLovegood 更新为与浏览器更加兼容:https://gist.github.com/victorlin/9c0be8f2d3305eae4d7bb8c5907a9e17 (2认同)

kfb*_*kfb 7

你当然可以使用GitHub API来实现这一点,但是你需要做一些小小的工作.

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

现在,使用get all references API,列出存储库中的所有引用.请注意,Git Data API中分支的语法与从pull请求API返回的语法略有不同(例如refs/heads/topicvs. topic),因此您必须对此进行补偿.引用API还返回标记,除非您只搜索refs/heads/子命名空间,如文档中所述,因此请注意这一点.

一旦你有了这两个分支引用列表,就可以很容易地确定哪些分支没有开放拉取请求(不要忘记考虑master或你想保留的任何其他分支!).

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

  • 我写了一个Python脚本来完成这个.它列出了至少一个已关闭的PR引用的所有现有分支,并且没有打开PR.https://github.com/simplesurance/utils/blob/master/git/stale_github_pr_branches.py (3认同)