👨‍🎨 👨‍💻 🙋‍♂️ .DS_Store
442 words
spencerwoo.com@realSpencerWoo

Batch Git Pull:分享一个维护多个 Git 仓库的小脚本

不废话,放脚本:

find . -maxdepth 3 -name .git -type d | rev | cut -c 6- | rev | xargs -I {} git -C {} pull

更为方便的,直接将这部分加入你的 .zshrc 或者 .bash_profile:

alias gpall="find . -maxdepth 3 -name .git -type d | rev | cut -c 6- | rev | xargs -I {} git -C {} pull"

之后,直接执行 gpall 即可。

好了,我们进入正题。

维护多个 Git 仓库的需求

维护多个 Git 仓库不容易。我在我存放 GitHub 仓库的目录下运行了一下 tree:

.
├── AIP_BackEnd
├── Evaluation_BackEnd
| ... ...
├── SchoolProjects
│   ├── Distance-Vector-Algorithm
│   ├── cartoonize-images
| ... ...
│   ├── zanpress-blog
│   └── zanpress-diagram
| ... ...
└── wechat-format

103 directories

103 个目录……我自己 Documents/GitHub 文件夹下就有这么多 Git 仓库,一个一个去更新真的很费事情。如何批量更新 GitHub 本地仓库呢?其实就是一个遍历目录,对匹配到的 Git 仓库在其当前分支下执行 git pull 的需求嘛,很简单。

解决方法

在 Medium 上面,我找到了一个相当优雅的脚本。前面这个脚本已经分享给各位了,我们重新看一下:

find . -maxdepth 3 -name .git -type d | rev | cut -c 6- | rev | xargs -I {} git -C {} pull

可以发现,这一长串命令,事实上就是前面的命令执行结果通过「管道」输出至后面的命令作为输入,也就是命令中 | 的功能。我们一段一段看一下这个命令具体都干了什么。

用 find 搜索目录下全部 .git/ 文件夹

find . -maxdepth 3 -name .git -type d

裁剪出我们要的 .git 文件夹所在路径

... | rev | cut -c 6- | rev | ...

Screen Shot 2019-10-29 at 3.51.46 PM.png

利用 xargs 执行带参数的 git pull

xargs -I {} git -C {} pull

最后,我们来看一看效果:

Screen Recording 2019-10-28 at 11.39.57 AM.2019-10-28 11_45_45.gif

📚References

我又双叒搬家了:新的博客平台 Listed

文章大意:Standard Notes 真是好用哦,我也不藏着掖着啦。大家快用起来!

好啦,正式开始。

先讲讲历史

为了方便记录,我把这段历史时期称作「对博客部署系统的早期探索阶段」。

不瞒大家说,我从 2017 年开始就试图撰写自己的博客,试图丰富自己在互联网上留下的痕迹。我最初是在 GitHub 上面,利用方便的 Hexo 引擎创建博客的。Hexo 无疑是一个优秀的博客框架,简单的配置方法和丰富的主题插件让 Hexo 几乎可以胜任「静态博客」的全部功能。

GitHub Pages 也是一个怪物:一个用来放项目介绍与文档网站的部署平台,硬生生被我们玩成了博客,而且利用 GitHub Pages 搭建的博客越来越多,社区支持的越来越丰富,教程同样数不胜数。这让我几乎就将这个被玩坏了的功能 take for granted 了。

VuePress 构建博客

弊端呢?肯定是有的,GitHub Pages 毕竟是静态页面。同阶段的同学们也有很多搭起来了自己的博客,但是几乎都是通过云服务器(白嫖腾讯云学生账户 😄)配 WordPress 实现的。WordPress 有自己的一整套博客部署系统:有 Admin 管理页面、有评论系统等等,这和当时还不算成熟的 Hexo 形成了非常鲜明的反差。当时我身边的人里面,只有我在用 Hexo 搭建静态博客,并且最初我连评论系统都没有,非常孤独。

另外,我再给用 WordPress、Ghost 等服务端博客系统的阶段起个名字,就叫「前静态博客阶段」吧。

再说说少数派

「对博客部署系统的早期探索」时期,我写的文章大多都是非技术性的文章。我自认为自己有着相当的美学追求 😛,这让我在使用 App 的过程中找到了非常多有着优秀界面与用户体验的工具,同时我还摸索出了各个系统、各个 App 的配色、主题等等的魔改方法。这些构成了我大部分早期博客内容。没想到,我所擅长撰写的内容中有很大一部分主题和少数派文章选题非常契合,这也最终让我花费更多的精力在少数派平台上发布文章。

少数派 sspai

目前,我在少数派上面发文已经快有一年时间了。少数派改版之后,有了全新的数据统计,我发现,这小一年的时间里,我还写了不少东西!

  • 写作 115,766 字
  • 获得 9,814 能量
  • 文章被阅读 1,539,203 次
  • 成为少数派 660 天

不错不错。在少数派写作开始,一直到现在,我都非常有成就感,以至于这段经历我可以骄傲的写入简历里面。

这里是时间线上的一个分支,这段时期不仅让我的经历和折腾沉淀成为内容,还转化为了价值(阅读、关注、稿费)。我们称之为「价值内容大革命时期」。

过渡阶段的技术博客

但是,我本职是个开发者啊,吃饭的本领不能落下。我写博客的两年里面,从自己部署的博客到少数派文章,它们的主题几乎全部都是应用推荐、魔改主题、生产力工具使用等等,跟技术不搭边。

不可以,知识需要沉淀。

在 GitHub Pages 上面部署的最后一个版本的博客是使用 VuePress 构建的。VuePress 生态强大,自定义功能丰富,社区支持也非常多。目前我创建文档的首选就是 VuePress。但是 VuePress 终归是为文档而生的,GitHub Pages 终归也是一个单纯的「静态站点部署平台」,曾经所有的评论因为博客主题与底层技术栈的迁移都丢失了。在我最后一版部署在 GitHub 上面的博客因为评论问题被我归档之后,我决定从头开始。我选择了一个能够更加持久化存储内容的平台:Medium。

Medium

在今年暑假之后,我在 Medium 上面创建了一个站点:Spencer Weekly,分享我做项目的时候遇到的技术难点和解决方法。Medium 是一个非常优秀的写作站点,但是 Medium 上面的中文文章太小众了,以至于我在 Medium 上分享文章有一种面壁的感觉。我撰写了两篇文章之后就放弃了。

这段历史时期我就称之为「完成内容转型的过渡阶段」吧。

最后是现在

那么,我们就来到了现在。

  • 在「对博客部署系统的早期探索」历史阶段,我完全没有将这个博客当做非常严肃的内容创作平台,反而经常发发碎碎念。
  • 在「价值内容大革命」时期,我找到了我所擅长的内容输出方向,也让我一直坚持写作到现在。革命尚未结束。💪
  • 在「完成内容转型的过渡」历史阶段,我成功将我的技术经历沉淀成为结果,但是由于 Medium 不符合我国特色,最终也逐渐被我抛弃。

最后,我找到了 Listed 这个平台。Listed 是一个非常克制的产品,和其兄弟产品 Standard Notes 一样,注重内容、注重扩展性、注重加密和安全。我喜欢。

Listed

Standard Notes 是业界出名的端到端加密跨平台笔记应用。其 100 年版本控制让我惊艳,丰富的编辑器插件(不仅支持富文本,还支持 Markdown、LaTeX、表格、To-Do 清单……)也让我心水。一度我决定直接将我的全部笔记迁移过来,但是由于 Bear 实在太好看,不舍得丢弃,因此没有进行彻底。

Listed 是 Standard Notes 附赠的一个博客平台,类似 Medium,但是国内访问相对方便。同时,Listed 也一样克制:没有多余的自定义项目、用邮件订阅博客、用 Guestbook 取代了评论,我喜欢。

欢迎你去我的 Guestbook 留言!

目前我的打算是这样的:Standard Notes 和 Listed 一起作为我的博客专属发布工具,全平台(Windows、macOS、Linux、iOS 和 Android 均有原生客户端)支持的 Standard Notes 让我随时随地能够撰写博客,Listed 极为简单的配置和持久的内容管理也让我能够专注输出内容。我可以。

如果你看到了这里,我真的要对你说一声「谢谢关注」,谢谢在这偌大的网络海洋里发现了我。在互联网上留下足迹不容易,即刻关停之后,即使之后出现了 Jellow,我也不太喜欢在那里分享我的生活了。反而微博成为了我的主要阵地。现在,我搬家来了 Listed,希望你喜欢我的文章。感谢阅读。♥