用于删除GitHub草稿版本的命令

时间:2016-06-29 16:29:55

标签: git github github-api git-tag

我正在尝试删除GitHub中的Release,所以我正在做

git tag -d {release-tag-name}
git push origin :{release-tag-name}

这会删除标记(本地和远程),但它会在GitHub中留下Draft版本,我也想删除它。

我可以通过登录GitHub并点击删除按钮删除它,但我想避免通过网站这样做。

是否有命令实现这一目标?我发现了一些关于删除标签的其他类似帖子,但他们最终都会转到GitHub删除Draft

修改

在此question's accepted answer中,第2步和第5步与我的问题有关。第2步说This will turn your "Release" on GitHub into a Draft that you can later delete.,而第5步指示删除GitHub网站中的草稿,而不是通过命令。

3 个答案:

答案 0 :(得分:7)

发布不是git CLI可以帮助您的。

发布是GitHub特有的东西。

您可以使用GitHub API创建/更新/删除版本。

DELETE /repos/:owner/:repo/releases/:id

如果您想自动与GitHub API进行交互,您可以执行以下操作:

  1. Get an API token具有适当的权限。
  2. 将它存放在某处,让我们说环境变量。
  3. 写几个脚本。
  4. 例如,在这种情况下,您可以使用一个脚本删除本地标记,调用API以获取标记ID by name,删除远程标记并删除版本。

答案 1 :(得分:1)

由于@GabLeRoux指出hub现在具有删除发布的功能,并且能够根据需要列出草稿并格式化输出,因此我写了以下内容,从我们的仓库中删除所有草稿发布:

hub release -f "%T (%S) %n" --include-drafts | grep " (draft)" | awk '{print $1}' | xargs -t -n1 hub release delete

打破这一点:

hub release -f "%T (%S) %n" --include-drafts:打印所有发行版,如果它们的状态如“草稿”或“预发行版”,则将该状态放在括号内。您最终将得到如下输出:

release-name-1 ()
release-name-2 ()
release-name-3 (draft)
release-name-4 ()
release-name-5 (draft)
release-name-6

现在将其管道传输到| grep " (draft)"中,以便我们仅使用(draft)打印行:

release-name-3 (draft)
release-name-5 (draft)

现在对于这些行中的每行,将其通过管道传递到| awk '{print $1}'中,以仅占据第一部分(在第一空格之前)。 (如果任何版本的名称中有空格,则将无法使用):

release-name-3
release-name-5

现在将所有这些草稿版本名称通过管道传递到xargs -t -n1 hub release delete中,它将在输入的每一行中调用hub release delete <RELEASE_NAME_HERE>

hub release delete release-name-3
hub release delete release-name-5

(关于那些xargs参数:-t首先回显该命令,-n1告诉它对每一行输入单独调用hub。)

如果您想放慢脚步,看看它认为应该删除的草稿版本,请运行以下部分:

hub release -f "%T (%S) %n" --include-drafts | grep " (draft)" | awk '{print $1}'

如果您想慢一点,请将-p作为参数添加到xargs中,它将在运行每个命令之前提示您。

答案 2 :(得分:0)

我也需要这样做。 Anton Sizikov的回答是正确的,但有时直接与github的api合作可能有点棘手。

hub an issue on thisPR is now merged

要删除版本,您需要做的只是install hub并在项目文件夹中运行:

hub release delete <TAG>

您可以使用此类

删除所有版本
git fetch --all --tags
git tag | xargs hub release delete

或者您可以在文件中列出要删除的所有标签(每行一个标签),然后执行以下操作:

cat tags_i_want_to_delete.txt | xargs hub release delete

请参阅tldr xargs for details

替代解决方案:使用nodejs示例删除草稿标记

感谢Steve Mao github-remove-all-releases

npm init
npm install --save github-remove-all-releases dotenv

main.js

require('dotenv').config();

var githubRemoveAllReleases = require('github-remove-all-releases');

var AUTH = {
    type: 'oauth',
    token: process.env.GITHUB_TOKEN
};

// this is where the magic happens, we filter on tag.draft, if it's true, it will get deleted
a_filter = function (tag) {
    return Boolean(tag.draft);
};

a_callback = function (result) {
    console.log (result);
};

githubRemoveAllReleases(AUTH, process.env.GITHUB_OWNER, process.env.GITHUB_REPO, a_callback, a_filter);

Get yourself a token并创建一个.env文件,如下所示:

GITHUB_OWNER=owner
GITHUB_REPO=repo
GITHUB_TOKEN=your_token

然后运行它(因为它不支持分页几次):

npm main.js