繁体   English   中英

使用 `git push origin:branch-name` 有条件地删除远程分支……但前提是分支存在?

[英]Conditionally delete a remote branch using `git push origin :branch-name` … but only if branch exists?

我的问题的简短版本:

有没有办法使用git push origin:gh-pages有条件地删除远程分支,如果 gh-pages 分支不存在,该命令将被跳过或忽略?

我的问题的长版本:

我正在构建一个样板/入门模板,用于使用 NPM 作为构建基本网页的构建系统或工作流程(而不是使用诸如 Grunt 或 Gulp 之类的东西)。 该项目使用/build文件夹,我想使用 Github Pages 来提供/build的内容。 从 /settings 似乎没有一个简单的方法来做到这一点(我只看到 /root,而不是 /build),所以我遇到了这个命令:

git subtree push --prefix build origin gh-pages

它创建了一个gh-pages分支,并将我的更改从我的 master 分支的/build文件夹推送到新创建的gh-pages分支。 出色的!

不幸的是,我不能简单地用更改来更新我的gh-pages分支(我也不想这样做)。 我也无法在master中进行更改,然后将它们合并到gh-pages中。 我收到很多错误消息,分支不相关、不同步或其他。

相反,我需要在master中进行更改,然后再次使用git subtree push --prefix build origin gh-pages命令来推送这些更改。 但是我遇到了另一个错误,它不想将新的更改推送到现有的gh-pages分支中。

好的......所以为了解决这个问题,我将git push origin:gh-pages添加到我的命令中。 所以现在我的 package.json 中的“部署”命令如下所示:

  "scripts": {
    ...
    "deploy": "git push origin :gh-pages && git subtree push --prefix build origin gh-pages",
    ...
  },

这很好用。 我只需在我的终端中输入npm run deploygit push origin:gh-pages删除现有的gh-pages分支和git subtree push --prefix build origin gh-pages更改创建一个新gh-pages分支。 出色的!

但是......我似乎无法弄清楚的最后一个问题是这个。 如果是第一次运行 deploy 命令,则 gh-pages 分支将不存在,并且我的部署脚本将失败。

那么有没有办法有条件地运行git push origin:gh-pages部分? 类似于if origin gh-pages exists... git push origin:gh-pages

顺便说一句,以这种方式删除分支(使用前导冒号)对我来说是全新的。 并且git-push 手册页没有很好地解释它。 要了解git push origin:gh-pages如何导致删除gh-pages分支,请查看此链接

如果它可能有帮助,这里是repo package.json 文件是部署脚本所在的位置。

如果失败,您可以简单地调用 push-to-delete 并继续。 这是粗略的——当且仅当它由于分支不存在而失败时才继续更好——但可以使用。 即使命令失败也要继续,请使用git push origin:gh-pages; git subtree push --prefix build origin gh-pages git push origin:gh-pages; git subtree push --prefix build origin gh-pages

我不会推荐这种方法(无论有没有更聪明的方法来检测“理想的失败”)。 您在自己的评论链接的同一个评论线程中还有另一个解决方案,其中提到了这种方法:

 git push origin `git subtree split --prefix build_folder master`:gh-pages --force

这有点短和简单。 请注意,这使用build_folder而不是build 如果我们让它匹配,并使用+语法来实现强制推送和我发现比反引号语法更好的$(...)语法,我们得到:

git push origin +$(git subtree split --prefix build master):gh-pages

如果git subtree split本身可能会失败,请使用:

hash=$(git subtree split --prefix build master) && git push origin +$hash:gh-pages

如果您想要一个名为gh-pages的本地分支,请使用:

hash=$(git subtree split --prefix build master) && git branch -f gh_pages $hash && git push -f origin gh-pages

例如。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM