尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
用Git命令展示Unix管道之美
Unix哲学**程序别做得太复杂一个程序做好一件事还要方便和其他程序组合起来。**一个程序把结果输出出来另一个程序接着拿这个结果继续处理。Unix里的管道|就是干这个的。在《The Unix Programming Environment》里提到过Unix真正强大的地方往往不在于某一个程序有多厉害而在于这些小程序组合起来以后能做什么。很多命令单独看都只是解决一个很小的问题。但把它们接起来就能组成一个新的工具而且这种组合方式还可以不断复用。书里讲的是这个思想。那如果把它放到Git提交记录上具体应该怎么做比如业务仓库里偶尔会有人问最近这段时间谁提交得最多当然可以专门写个脚本统计。不过按照Unix的思路通常没必要。手边已经有的几个命令接起来往往就够了。用Apache Tomcat源码作为例子实际跑一遍这个过程。先在仓库根目录执行一条命令让Git只输出每次提交的作者名。pretty格式写成format:%an这样每个提交只输出一行git -c format.prettyformat:%an log -80前几行大概是这样Christopher Schultz Mark Thomas Mark Thomas Christopher Schultz Christopher Schultz这里还是按照提交时间倒序排列同一个人会反复出现。光看这串记录很难直接看出谁提交得最多。接下来用Unix里的sort。它可以把每一行按字母顺序排好。同一个人的名字排到一起后面才方便统计git-cformat.prettyformat:%an log-80|sort排完以后Christopher Schultz会挨在一起Mark Thomas也会挨在一起。这时候再接一个uniq。它可以统计相邻的重复行。所以前面的sort不能省否则同一个人的名字如果被其他人隔开uniq就统计不完整。加上-c让uniq在每行前面显示出现次数git-cformat.prettyformat:%an log-80|sort|uniq-c结果类似这样16 Christopher Schultz 1 ChristopherSchultz 1 Dimitrios Soumis 52 Mark Thomas 10 remm现在次数已经统计出来了但还是按照作者名字的字母顺序排列。还差最后一步按照提交次数从大到小排序。sort的-n表示按照数字比较-r表示倒序排列。把它接到后面git-cformat.prettyformat:%an log-80|sort|uniq-c|sort-nr结果就变成52 Mark Thomas 16 Christopher Schultz 10 remm 1 Dimitrios Soumis 1 ChristopherSchultz这样一个简单的提交排行就完成了。整个过程没有专门写统计脚本只是把四个现成的命令接了起来Git负责取数据 → sort负责排序 → uniq -c负责计数 → sort -nr负责按次数重新排序。这其实就是Unix管道最典型的用法。前一个命令把结果交给后一个命令每个命令只负责自己那一步。命令很小但组合起来就能完成一个完整的任务。而且这里有个细节很值得注意sort和uniq的顺序不能反。uniq只统计相邻的重复行所以必须先把相同的名字排到一起才能正确计数。这条管道里每个命令到底做了什么上面那段输出本身并不复杂真正容易搞混的是中间这几步。四个命令分别负责什么可以直接看下面这张表命令单独做的事不串的话git log每个提交输出一行作者名只有提交流水看不出谁提交得多sort按字母顺序把行排好同一个人的名字可能分散uniq就会漏数uniq -c合并相邻的重复行并统计次数没有先sort统计结果就不准sort -nr按数字从大到小重新排序结果还是按作者名字排列无法形成排行榜其实还有一条现成的命令可以完成类似的事情。git shortlog -sn就能直接输出提交次数排行。不过管道的意义并不是为了替代这条命令。这里真正值得注意的是**sort和uniq**根本不需要知道Git是什么。换成一份普通的文本作者列表同样可以用这套组合。数据来源变了sort和uniq还是照样工作。如果专门给Git仓库做一个提交排行功能换一种数据来源可能又得重新写一套。而这些Unix小工具只管处理输入不关心这些文本到底来自Git、日志还是其他程序。榜单里还有一个很容易被忽略的细节。Christopher Schultz有16次另外还有一行ChristopherSchultz只有1次。人眼看上去很容易认为这是同一个人。但uniq比较的是完整的字符串中间有没有空格、名字怎么拼只要不完全一样就会被当成两个人。Git日志里出现这种署名不统一的情况并不奇怪。管道也不会替你判断两个名字是不是同一个人它只负责处理传进来的文本。还有一个实际问题如果是在Windows上操作这条命令最好放到Git Bash里运行。PowerShell里的sort和Unix的sort不是一回事而且PowerShell本身也没有Unix那个uniq命令。Git for Windows自带的usr/bin目录里有sort、uniq这些Unix工具在Git Bash里运行才能和上面的命令保持一致。所以业务里遇到类似的统计需求时不一定要马上加一个统计模块。**先看看手里的小工具能不能接起来。**很多时候几个简单命令配上一条管道就已经够用了。
RELATED

相关推荐

人体姿势检索实战指南:用 Pose-Search 三步从海量图片中找出指定动作

人体姿势检索实战指南:用 Pose-Search 三步从海量图片中找出指定动作

人体姿势检索实战指南:用 Pose-Search 三步从海量图片中找出指定动作 【免费下载链接】pose-search x6ud.github.io/pose-search 项目地址: https://gitcode.com/gh_mirrors/po/pose-search 本次文章采用"动手实战式"结构:以一次真实的&…

📅 2026/9/24 7:49:55
SDC命令详解:使用current_design命令设置当前设计

SDC命令详解:使用current_design命令设置当前设计

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 current_design命令用于设置当前设计,当前设计以及当前实例是许多命令的默认目标对象,关于当前实例,可以参考下面的博客。 SD…

📅 2026/9/25 11:55:28
避坑指南:Mid360激光雷达ROS节点运行无点云输出的排查实录

避坑指南:Mid360激光雷达ROS节点运行无点云输出的排查实录

一、 问题现象与排查思路在部署MID-360激光雷达的过程中,开发者常会遇到雷达初始化失败或ROS节点启动后无数据输出的问题。如下图所示。针对此类故障,核心排查逻辑应遵循“先物理链路,后软件配置”的原则。首先,我们需要绕过ROS环…

📅 2026/9/25 10:24:10
MORE NEWS

更多资讯

📰

RISC-V内核移植实战:GD32VF103上RT-Thread上下文切换与异常处理

1. 为什么RISC-V内核移植不是“换个CPU跑个RTOS”那么简单很多人第一次接触RISC-V内核移植,脑子里浮现的画面是:把ARM Cortex-M3的RT-Thread工程复制过来,改几行启动代码,换上GD32VF103的芯片包,烧进去——成了。我去年…

📰

WVD时频分析实战:交叉项抑制与MATLAB参数调优指南

1. 为什么WVD不是“升级版STFT”,而是信号分析里一个必须亲手调参的“手艺人工具”在MATLAB信号处理 Toolbox 的官方文档里,Wigner-Ville Distribution(WVD)被归类在“时频分析”章节下,和短时傅里叶变换(S…

📰

DBeaver连接ClickHouse实战:驱动配置与HTTP协议避坑指南

1. 这不是普通数据库连接教程,而是ClickHouse在DBeaver里“活过来”的全过程DBeaver连接ClickHouse这件事,表面看只是填几个参数点个测试按钮,但实际踩过的坑,能写满三页A4纸。我去年帮两家做实时数仓的团队部署BI看板&#xff0c…

📰

Flutter鸿蒙适配实战:宠物驱虫记录器开发全解析

在移动开发这个圈子里,Flutter 的名字这几年几乎成了跨平台方案的代名词。你要是还没听说过它,那确实是有点说不过去了。我自己的感受是,Flutter 最吸引人的地方不在于“一套代码跑两端”这种口号,而在于它在 UI 渲染层面那种接近…

📰

MySQL DML实战指南:INSERT、UPDATE、DELETE与事务机制的避坑手册

我印象最深的一次线上事故,是有人准备在 MySQL 里删一条测试数据,结果 DELETE 语句忘了带 WHERE,把一张几万行的订单表直接清空。MySQL 的 DML(Data Manipulation Language,数据操纵语言)三兄弟——INSERT、…

📰

鸿蒙 Flutter 应用如何用 rbush 空间索引解决百万点位性能瓶颈

如果你最近正在鸿蒙设备上用 Flutter 做地图、LBS 或者游戏类的应用,大概率会遇到一个非常实际的问题:点位一多,界面就开始卡。尤其是那种要同时展示几千上万个动态点位的场景,拖动地图像在翻幻灯片,FPS 掉到个位数是常…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬