我正在尝试删除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网站中的草稿,而不是通过命令。
答案 0 :(得分:7)
发布不是git CLI可以帮助您的。
发布是GitHub特有的东西。
您可以使用GitHub API创建/更新/删除版本。
DELETE /repos/:owner/:repo/releases/:id
如果您想自动与GitHub API进行交互,您可以执行以下操作:
例如,在这种情况下,您可以使用一个脚本删除本地标记,调用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 this和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
感谢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