Giter VIP home page Giter VIP logo

blog_with_issues's Introduction

博客

我的个人博客,使用Github issues和Actions实现:

  • 通过issues或commits触发
  • 自动生成README.md
  • 自动归档博客文档至BACKUP目录

最近更新

DEVOPS

K8S

TIPS

待办事项

TODO list from 学习计划--书籍【4 jobs to do--0 jobs done】

TODO list from 学习计划--云原生&Devops【3 jobs to do--0 jobs done】

TODO list from 学习计划--Go语言【2 jobs to do--0 jobs done】

TODO list from 学习计划--前端【2 jobs to do--0 jobs done】

blog_with_issues's People

Contributors

easonassassin avatar

Watchers

James Cloos avatar  avatar

Forkers

web-logs2

blog_with_issues's Issues

Mac小技巧

小技巧系列:我个人使用mac时常用的软件和技巧

1. OmniGraffle绘图软件

用来绘制图表,流程图,组织结构图以及插图,也可以用来组织头脑中思考的信息,组织头脑风暴的结果,绘制心智图,作为样式管理器,或设计网页或PDF文档的原型。
它具有采用拖放的所见即所得界面。

2. Privoxy做中转代理

部分代理基本都使用SOCKS5,某些场景下我们需要HTTP代理,如git仅支持HTTP代理。
使用Privoxy可以把SOCKS代理,转成HTTP代理。这样就可以提供给git和ios设备使用。

  • 下载:brew install privoxy
  • 配置:修改/usr/local/etc/privoxy/config
# privoxy服务端口。使用0.0.0.0即可在局域网内使用此代理,如只想本机使用,使用127.0.0.1。
listen-address 0.0.0.0:8118
# socks5端口
forward-socks5 / 127.0.0.1:1080 .
  • 启动:brew services restart privoxy

3. Proxy快捷键

  • 编辑~/.zshrc
alias proxy='export all_proxy=http://127.0.0.1:8118'
alias unproxy='unset all_proxy'

4. Git快捷键

  • 编辑~/.gitconfig
[alias]
        co = checkout
        ci = commit
        st = status
        pl = pull
        ps = push
        dt = difftool
        l = log --stat
        cp = cherry-pick
        ca = commit -a
        b = branch
        ri = rebase -i
        ss = stash
        sp = stash pop
        sl = stash list
        unstage = reset HEAD --
        cache = diff --cached
        tmp = commit -a -m"tmp"
        ff = pull --ff-only
        prev = reset HEAD^
        pr = remote prune origin   
[log]
        date = iso8601
[core]
        editor = vim
[user]
        email = abc@***.com
        name = abc
  • 使用:git st #即git status

5. Git自动提交

  • 编辑/usr/local/bin/gta
#!/bin/bash

COMMIT=$(if [ "${1}" ]; then echo ${1}; else echo "auto commit"; fi)
BRANCH=$(git symbolic-ref --short -q HEAD)
git add -A
git status

read -r -p "是否继续提交? [Y/n] 自动提交且合并到master分支请按'[a/A]':" input

case $input in
    [nN][oO]|[nN])
        echo "中断提交"
        exit 0
            ;;
    [aA])
        echo "继续提交并自动合并到master分支"
        echo "commit msg: ${COMMIT}"
        echo "current branch: ${BRANCH}"
        git commit -m "${COMMIT}"
        git push origin "${BRANCH}"
        git checkout master
        echo "git checkout master"
        git merge ${BRANCH}
        echo "git merge dev"
        git push origin master
        echo "git push origin master"
        git checkout ${BRANCH}
        echo "git checkout dev"
                    exit 0
        ;;
    [yY][eE][sS]|[yY]|*)
        echo "继续提交"
        echo "commit msg: ${COMMIT}"
        echo "current branch: ${BRANCH}"
        git commit -m "${COMMIT}"
        git push origin "${BRANCH}"
                    exit 0
        ;;
    *)
    echo "输入错误,请重新输入"
    ;;

esac
  • 使用:gta "this is test" #即git commit -m "this is test" && git push origin ***

6. Gvm管理go版本

gvm的本质是shell脚本。其安装go的原理是通过下载github上go的源码,通过git标签的方式来检测go的版本,然后通过源码编译的方式来安装go。
所以跟github源码地址的网络连通性,将是决定gvm安装是否顺利的决定性因素。

  • 安装:brew install gvm
  • 加速:编辑vim ~/.gvm/scripts/install
GO_SOURCE_URL=https://github.com/golang/go
GO_BINARY_BASE_URL=${GO_BINARY_BASE_URL:-"https://golang.google.cn/dl/"}
  • 查看全部版本:gvm listall
  • 下载指定版本:gvm install go1.20.2
  • 使用指定版本:gvm use go1.20.2 --default

7. Bartender

用于整理mac右上角图表的工具

image

8. Lx-music-desktop

用于免费听所有完整音乐的神器

9. QuickTimePlayer和iMovie剪辑

我主要用来做录屏教程分享

  • 下载:官方App Store下载
  • 使用shift + command + 5调用QuickTimePlayer进行录屏,得到.mov的视频
  • .mov视频仅能在mac上面识别
  • 通过iMovie进行剪辑
  • 导出转化成.mp4文件:文件 -> 共享 -> 文件...

10. 翻页时钟

锁屏界面显示时钟

  • 下载:App Store

11. 日历Fantastical

功能更强大的日历软件

image

12. iStatistica

显示mac网络、内存、CPU等信息

image

13. Paste

记录剪贴板历史

14. Manico

自定义mac上各种app快捷键

Git小技巧

小技巧系列:使用git时常用的技巧

1. Git clone --depth 1加速后遗症完美解决

参考公众号【神光的编程秘籍】;

  • git clone超大项目时,clone会很慢,此时通过git clone --depth 1来加速,效果明显;
  • 但同时引入了一些问题:
    • 切换不到历史commit
    • 切换不到别的分支
  • 原因在于:
    • git是通过commit存储commit,tree存储目录,blob存储文件内容
    • 每个commit关联这些对象的入口
    • depth 1只会下载最后一个commit关联的对象,下载内容更少,所以速度快
  • 没有历史commit,可以通过git pull --unshallow来解决
  • 切换不到其他分支是因为fetch配置导致的,修改.git/config中的fetch = +refs/heads/*:refs/remotes/origin/*,或者使用命令行git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*
  • 此时通过git fetch即可获取远程所有分支

修复建议

  • clone超大代码库后,后续push代码,depth 2会比depth 1快很多。因为depth 1下载的commits的第一个是被修改过的"家根节点",push的时候跟服务器diff对不上导致需要全量发送整个repo文件。但是depth 2得第二个commit跟服务器能对上,push时就可以顺利找出diff发送增量部分的文件。

完善方法

  • git clone --filter=blob:none可以只下载commits历史以及HEAD的文件,但不下载其他源码文件。后期可以查看commits历史以及切换分支,但是切换分支时会触发一次从remote下载源文件

2. Git log进阶

  • git log:可以通过--author、--before、--after、--grep、--merges、--no-merges、--all来过滤某个作者、某个时间段、某个commit内容、非merge的commit、全部分支的commit等

    • --author:过滤某个作者
    • --before--after:过滤某个时间段
    • --grep:正则匹配commit内容
    • --merges:merge的commit
    • --no-merges:非merge的commit
    • --all:全部分支的所有commit
    • --format:指定输出的颜色和格式
      • git log --graph --format='%Cred%h%Creset -%C(yellow)%d%Creset %s%Cgreen(%cr) %C(bold blue)<%an>%Creset
      • 详细参数:
        • %H: commit hash
        • %h: 缩短的commit hash
        • %T: tree hash
        • %t: 缩短的 tree hash
        • %P: parent hashes
        • %p: 缩短的 parent hashes
        • %an: 作者名字
        • %aN: mailmap的作者名字 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
        • %ae: 作者邮箱
        • %aE: 作者邮箱 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
        • %ad: ⽇期 (–date= 制定的格式)
        • %aD: ⽇期, RFC2822格式
        • %ar: ⽇期, 相对格式(1 day ago)
        • %at: ⽇期, UNIX timestamp
        • %ai: ⽇期, ISO 8601 格式
        • %cn: 提交者名字
        • %cN: 提交者名字 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
        • %ce: 提交者 email
        • %cE: 提交者 email (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
        • %cd: 提交⽇期 (–date= 制定的格式)
        • %cD: 提交⽇期, RFC2822格式
        • %cr: 提交⽇期, 相对格式(1 day ago)
        • %ct: 提交⽇期, UNIX timestamp
        • %ci: 提交⽇期, ISO 8601 格式
        • %d: ref名称
        • %e: encoding
        • %s: commit信息标题
        • %f: sanitized subject line, suitable for a filename
        • %b: commit信息内容
        • %N: commit notes
        • %gD: reflog selector, e.g., refs/stash@{1}
        • %gd: shortened reflog selector, e.g., stash@{1}
        • %gs: reflog subject
        • %Cred: 切换到红⾊
        • %Cgreen: 切换到绿⾊
        • %Cblue: 切换到蓝⾊
        • %Creset: 重设颜⾊
        • %C(…): 制定颜⾊, as described in color.branch.* config option
        • %m: left, right or boundary mark
        • %n: 换⾏
        • %%: a raw %
        • %x00: print a byte from a hex code
        • %w([[,[,]]]): switch line wrapping, like the -w option of git-shortlog(1)
  • git shortlog:是git log的统计结果,可以按照作者来分组统计。比如上一周某个人提交了多少commit:

    • git shortlog --all -n --after="2023-03-01" --before="2023-03-31" --no-merges --format="%h %as %s"
    • git shortlog --all -n --since="30 days ago" --no-merges --format="%h %as %s"
  • git reflog:记录ref的变化历史,比如分支切换、reset、新的commit等都会记录下来,也可以直接在.git/logs/refs下查看

    • 常用场景:比如通过git reset到了一个之前的commit,又想恢复回去,这时候不知道最开始的那个commit hash是啥了,这时候就可以看reflog里的ref变化历史,找到之前的commit hash。

DevOps到底是个啥?

1. 前言

我一直很想标榜自己是一名DevOps工程师,但是事实上多数人都没听过。网上搜索一下,可能就会出现各种鱼龙混杂的概念,Devops是某种企业文化、实践、工具链。。。
事实上,大多数公司根本就没有DevOps工程师这个岗位。搜索某招聘软件,可能蹦出来的是cicd工程师、研发效能工程师、运维开发。。。同样是鱼龙混杂的!
这里,大家可能注意到我这边一直是用驼峰式的命名方法写的DevOps。从字面上看,DevOps就是开发(Dev)和运维(Ops)的组合?
要界定这个概念,众说纷纭,我今天也只是发表下我的理解。

初次使用issues写博客

目标

  • 根据issues标签自动编排README.md中的blog链接
  • 自动将isuues生成的博客文档备份到项目BACKUP目录下
  • 我当前的blog链接编排布局如下:
    • Gitblog:首行
    • 最近更新:根据创建日期选取最近的5篇blog
    • 其他标签:其他自定义标签所对应的blog
    • TODO:根据TODO标签所展示的blog

步骤参考

https://www.jianshu.com/p/8f1079b7efe1

步骤修复

完全按照上述文章的步骤操作,发现如下问题,需要以下步骤进行修复:

  • 需要新建项目根目录下的空文件README.md

  • 配置后发现README.md未更新,查看Actions发现是push denied:原因在于github actions对项目没有写入权限。

    • 需要到项目的settings -> Actions -> General -> Workflow permissions -> 勾选read and write permissions

image

  • 首页README.md的博客链接编排请参考main.py中的main方法

最佳实践

  • 通过本地的markdown编辑器编写blog
  • 复制blog中的内容,并创建对应的issue
  • 配置blog对应的标签(如有)

开发模式探讨

目前业界主要流行两种开发模式:特性分支开发模式(Feature Branch Development)和主干开发模式(Trunk Based Development)。特性分支开发模式的几种最佳实践:Git-Flow模式、Github-Flow模式。

开发模式比较

  • Github-Flow模式:从主干拉取分支,开发完成后发起PR,其他人可以Review这个PR,如果有修改意见可以提交给其他人进行Review,通过后合并主干

image

  • Git-Flow模式:

    • Develop:主要对Feature和Release进行集成
    • Feature:本地开发分支,开发完成后合并到Develop,不直接与Master交互
    • Release:总是基于Develop创建,最后合并到Develop。生命周期短,主要是为了发布
    • Hotfix:总是基于Master,最后合并到Master和Develop。生命周期短,用于修复线上bug
      image
  • A-Flow模式:

    • 从主干拉取特性分支
    • 多个特性分支合并形成发布分支,专门用于发布
    • 发布后,将发布分支合并到主干,并删除特性分支和发布分支
  • 主干开发模式:开发者直接向主干提交代码,每天至少一次提交主干,达到发布条件时,从主干拉取发布分支用于发布。若发现bug,直接在主干进行修复。
    image

  • 小结:

    • Github-Flow模式
      • 支持并行迭代,开发和测试周期宽松,合并冲突多、解决难,迭代速度慢
      • 自动化程度低
      • 轻量、学习成本低
      • 需要长期占用多套测试环境
    • Git-Flow模式
      • 支持并行迭代,开发和测试周期宽松,合并冲突多、解决难,迭代速度慢
      • 自动化程度低
      • 逻辑严谨,学习成本高
      • 需要长期占用多套测试环境
    • A-Flow模式:
      • 支持并行迭代,开发和测试周期宽松,合并冲突多,解决难,迭代速度慢
      • 自动化程度第
      • 逻辑严谨且学习成本低
    • 主干开发模式
      • 迭代速度快
      • 需要可靠的CICD基础设施
      • 分支模型学习成本低
      • 要求开发者有很强的架构设计和特性拆分能力

各种开发模式的适用条件

  • 适用特性分支开发模式:

    • 大部分特性开发和测试周期较长,比较依赖人工测试
    • 并没有频繁的分支冲突困扰
    • 产品对版本迭代速度需求不大
  • 适用主干开发模式:

    • 团队代码成熟,框架和基础设施完善
    • 有很高的开发迭代诉求
    • 团队成员有很强的测试驱动开发习惯,有完善的自动化测试工具和较高的测试覆盖率

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.