使用Bash进行自动拣选

我在Git仓库中管理我的Jekyll博客。 我的发布过程使用2个分支:

  • master包含所有生产内容
  • feature/newposts有新的博客文章,准备发布, 每个帖子一次提交

要发布现有帖子:

  1. 我在feature/newposts分支中检查了要发布的帖子
  2. 然后,获取关联的提交
  3. 樱桃在master分支中挑选
  4. 最后,我推

虽然没有那么慢,但这却很无聊。 这篇文章解释了我如何使用bash magic“自动化”上述过程。

日期

Bash用户知道如何获取当前日期:

date

输出:

Sun Aug  5 12:15:23 CEST 2018

但是,Jekyll博客文章文件名的格式为2018-08-05-xxx-yyy-zzz.adoc 。 看一下手册页,相关语法为:

date + '%Y-%m-%d'

它输出预期的字符串:

2018-08-05

路径

要获取Git树中文件的路径,需要使用git ls-tree命令:

git ls-tree-r feature/newposts  | grep`date + '%Y-%m-%d'`

这样产生:

100644 blob 2cb14109c9a41b67609b93a9fea904735d082a5c	_posts/2018-08-05-spring-boot-integration-intellij-idea.adoc

请注意,哈希是Blob的哈希,而不是提交的哈希。 从这一点出发,有两种方法:

  1. 用这个blob获取提交
  2. 使用此路径获取提交

出于没有真正的原因,我选择了第二个选项。

仅获取路径,需要剪切输出:

git ls-tree-r feature/newposts  | grep`date + '%Y-%m-%d'` | cut-c54-

现在可以正确打印:

_posts/2018-08-05-spring-boot-integration-intellij-idea.adoc

承诺

git log是用于获取特定路径的提交的命令。 它允许一个分支选项。

git log feature/newposts--$( git ls-tree -r feature/newposts  | grep`date + '%Y-%m-%d'` | cut-c54-)

输出:

commit dcc9dc60dc7ee615f35703c9a8e696d2dcae6d41
Author: Nicolas Fränkel < [email protected] >
Date:   Sun Apr 1 23:36:20 2018 +0200

    Add Spring Boot integration in IntelliJ IDEA post

      Fix #25

要将输出限制为提交值,请使用--format选项:

git log feature/newposts--format= %H --$( git ls-tree -r feature/newposts  | grep`date + '%Y-%m-%d'` | cut-c54-)

结果是:

dcc9dc60dc7ee615f35703c9a8e696d2dcae6d41

樱桃采摘

最后一步是挑选相关的提交。 在这一点上,这是显而易见的:

git cherry-pick$( git log feature/newposts --format= %H --$( git ls-tree -r feature/newposts  | grep`date + '%Y-%m-%d'` | cut-c54-))

最后一点

我没有找到cherry-pick插入特定分支的方法,因此无法将提交添加到当前分支。

上面的命令只需要添加到master分支的结账,然后返回即可。

git checkout master&&\
git cherry-pick $( git log feature/newposts --format= %H --$( git ls-tree -r feature/newposts  | grep`date + '%Y-%m-%d'` | cut-c54-))&&\
git checkout -

正如我们在较早的文章中所看到 ,如果上面的代码段是用名称为git-且位于PATH上的bash脚本编写的,则可以通过git调用它:

git发布
#!/bin/bash
git checkout master &&\
git cherry-pick $( git log feature/newposts --format= %H --$( git ls-tree -r feature/newposts  | grep`date + '%Y-%m-%d'` | cut-c54-))&&\
git checkout -

此时,可以像下面这样调用脚本:

git publish

翻译自: https://blog.frankel.ch/cherry-pick-automation-bash/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值