![](/img/trans.png)
[英]Git checkout difference git checkout origin/<branch-name> and git checkout <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 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 手册页没有很好地解释它。 要了解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.