删除 GitHub 草稿发布的命令
Command to remove GitHub Draft release
我正在尝试删除 GitHub 中的一个版本,所以我正在做
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 站点中的草稿,而不是通过命令。
发布不是 git CLI 可以帮助您的东西。
版本是 GitHub 特定的东西。
您可以使用 GitHub API 到 create/update/delete 版本。
DELETE /repos/:owner/:repo/releases/:id
如果您想自动与 GitHub API 交互,您可以执行以下操作:
- Get an API token 具有适当的权限。
- 将其存储在某处,比方说环境变量。
- 写几个脚本。
例如,在这种情况下,您可以使用一个脚本来删除本地标签,调用 API 获取标签 ID by name,删除远程标签并删除一个版本。
我也需要这样做。 Anton Sizikov 的回答是正确的,但直接使用 github 的 api 有时可能有点棘手。
hub had an issue on this, and the PR 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
替代解决方案:使用 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
由于@GabLeRoux 指出 hub
现在包括删除发布的能力,并且它能够按照我们的意愿列出草稿和格式化输出,我写了以下内容来删除所有草稿发布我们的回购:
hub release -f "%T (%S) %n" --include-drafts | grep " (draft)" | awk '{print }' | xargs -t -n1 hub release delete
分解:
hub release -f "%T (%S) %n" --include-drafts
:打印所有版本,如果它们的状态类似于 "draft" 或 "pre-release",请将该状态放在括号内。你最终会得到这样的输出:
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 }'
以仅获取第一部分(在第一行 space 之前)。 (如果任何版本的名称中包含 space,这将不起作用):
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 }'
如果你想真正慢下来,将 -p
作为参数添加到 xargs,它会在 运行 执行每个命令之前提示你。
我正在尝试删除 GitHub 中的一个版本,所以我正在做
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 站点中的草稿,而不是通过命令。
发布不是 git CLI 可以帮助您的东西。
版本是 GitHub 特定的东西。
您可以使用 GitHub API 到 create/update/delete 版本。
DELETE /repos/:owner/:repo/releases/:id
如果您想自动与 GitHub API 交互,您可以执行以下操作:
- Get an API token 具有适当的权限。
- 将其存储在某处,比方说环境变量。
- 写几个脚本。
例如,在这种情况下,您可以使用一个脚本来删除本地标签,调用 API 获取标签 ID by name,删除远程标签并删除一个版本。
我也需要这样做。 Anton Sizikov 的回答是正确的,但直接使用 github 的 api 有时可能有点棘手。
hub had an issue on this, and the PR 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
替代解决方案:使用 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
由于@GabLeRoux 指出 hub
现在包括删除发布的能力,并且它能够按照我们的意愿列出草稿和格式化输出,我写了以下内容来删除所有草稿发布我们的回购:
hub release -f "%T (%S) %n" --include-drafts | grep " (draft)" | awk '{print }' | xargs -t -n1 hub release delete
分解:
hub release -f "%T (%S) %n" --include-drafts
:打印所有版本,如果它们的状态类似于 "draft" 或 "pre-release",请将该状态放在括号内。你最终会得到这样的输出:
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 }'
以仅获取第一部分(在第一行 space 之前)。 (如果任何版本的名称中包含 space,这将不起作用):
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 }'
如果你想真正慢下来,将 -p
作为参数添加到 xargs,它会在 运行 执行每个命令之前提示你。