使用 `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
有条件地删除远程 b运行ch,如果 gh-pages b运行ch 不存在,则跳过或忽略该命令?
我的问题的长版:
我正在构建样板/入门模板,以使用 NPM 作为构建系统或构建基本网页的工作流(而不是使用 G运行t 或 Gulp 之类的东西)。该项目使用 /build
文件夹,我想使用 Github 页面来提供 /build
的内容。从 /settings(我只看到 /root,没有看到 /build)似乎没有简单的方法,所以我 运行 通过这个命令:
git subtree push --prefix build origin gh-pages
创建一个 gh-pages
b运行ch 并将我的更改从我的主 b运行ch 的 /build
文件夹推送到新创建的 gh-pages
b运行ch。太棒了!
不幸的是,我不能简单地用更改来更新我的 gh-pages
b运行ch(我也不想这样做)。我也无法在 master
中进行更改,然后将它们合并到 gh-pages
中。我收到很多关于 b运行ches 不相关、不同步等的错误消息。
相反,我需要在 master
中进行更改,然后再次使用 git subtree push --prefix build origin gh-pages
命令来推送这些更改。但是我 运行 进入另一个错误,它不想将新更改推送到现有的 gh-pages
b运行ch.
好的...所以为了解决这个问题,我在我的命令中添加了 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
b运行ch 并且 git subtree push --prefix build origin gh-pages
创建一个新的 gh-pages
b运行ch 我的改变。太棒了!
但是...我似乎无法弄清楚的最后一个问题是这个。如果这是第一次 运行ning 部署命令,gh-pages b运行ch 将不存在并且我的部署脚本失败。
那么有没有办法有条件地 运行 git push origin :gh-pages
部分?类似于 if origin gh-pages exists ... git push origin :gh-pages
?
顺便说一句,以这种方式(使用前导冒号)删除 b运行ch 对我来说是全新的。还有 git-push man page didn't explain it well. To understand how git push origin :gh-pages
results in deleting the gh-pages
branch, take a look at this link.
如果它可能有帮助,这里是 repo。 package.json 文件是部署脚本所在的位置。
您可以简单地调用一键删除并在失败时继续。这是粗略的——当且仅当由于分支不存在而失败但可用时,才继续进行会更好。要在命令失败时继续,请使用 git push origin :gh-pages; git subtree push --prefix build origin gh-pages
.
虽然我不推荐这种方法(有或没有更聪明的东西来检测“理想的失败”)。在同一个 comment thread you linked in 中还有另一个解决方案提到了这个方法:
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
例如。
我的问题的简短版本:
有没有办法使用 git push origin :gh-pages
有条件地删除远程 b运行ch,如果 gh-pages b运行ch 不存在,则跳过或忽略该命令?
我的问题的长版:
我正在构建样板/入门模板,以使用 NPM 作为构建系统或构建基本网页的工作流(而不是使用 G运行t 或 Gulp 之类的东西)。该项目使用 /build
文件夹,我想使用 Github 页面来提供 /build
的内容。从 /settings(我只看到 /root,没有看到 /build)似乎没有简单的方法,所以我 运行 通过这个命令:
git subtree push --prefix build origin gh-pages
创建一个 gh-pages
b运行ch 并将我的更改从我的主 b运行ch 的 /build
文件夹推送到新创建的 gh-pages
b运行ch。太棒了!
不幸的是,我不能简单地用更改来更新我的 gh-pages
b运行ch(我也不想这样做)。我也无法在 master
中进行更改,然后将它们合并到 gh-pages
中。我收到很多关于 b运行ches 不相关、不同步等的错误消息。
相反,我需要在 master
中进行更改,然后再次使用 git subtree push --prefix build origin gh-pages
命令来推送这些更改。但是我 运行 进入另一个错误,它不想将新更改推送到现有的 gh-pages
b运行ch.
好的...所以为了解决这个问题,我在我的命令中添加了 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
b运行ch 并且 git subtree push --prefix build origin gh-pages
创建一个新的 gh-pages
b运行ch 我的改变。太棒了!
但是...我似乎无法弄清楚的最后一个问题是这个。如果这是第一次 运行ning 部署命令,gh-pages b运行ch 将不存在并且我的部署脚本失败。
那么有没有办法有条件地 运行 git push origin :gh-pages
部分?类似于 if origin gh-pages exists ... git push origin :gh-pages
?
顺便说一句,以这种方式(使用前导冒号)删除 b运行ch 对我来说是全新的。还有 git-push man page didn't explain it well. To understand how git push origin :gh-pages
results in deleting the gh-pages
branch, take a look at this link.
如果它可能有帮助,这里是 repo。 package.json 文件是部署脚本所在的位置。
您可以简单地调用一键删除并在失败时继续。这是粗略的——当且仅当由于分支不存在而失败但可用时,才继续进行会更好。要在命令失败时继续,请使用 git push origin :gh-pages; git subtree push --prefix build origin gh-pages
.
虽然我不推荐这种方法(有或没有更聪明的东西来检测“理想的失败”)。在同一个 comment thread you linked in
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
例如。