【发布时间】:2021-05-02 23:22:45
【问题描述】:
我的问题的简短版本:
有没有办法使用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 分支并将我的更改从我的主分支的/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 deploy,git 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 man page 并没有很好地解释它。要了解git push origin :gh-pages 如何导致删除gh-pages 分支,请查看this link。
如果它可能有帮助,这里是repo。 package.json 文件是部署脚本所在的位置。
【问题讨论】:
-
另外,原来的解决方案来自gist.github.com/cobyism/4730490#gistcomment-1851849。我想发布它来感谢@mikeyhogarth 并提供额外的背景信息,以防其他人遇到同样的问题并且想知道我最初在哪里找到了部分解决方案。
-
git branch -r|grep origin/gh-pages -
git pushdocs explains:gh-pages非常详细。您的情况是“推送一个空的允许您从远程存储库中删除 ”引用。
标签: git github github-pages git-branch