用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里运行才能和上面的命令保持一致。所以业务里遇到类似的统计需求时不一定要马上加一个统计模块。**先看看手里的小工具能不能接起来。**很多时候几个简单命令配上一条管道就已经够用了。

相关新闻

Windows驱动清理怎么安全完成?Driver Store Explorer(RAPR)使用指南

Windows驱动清理怎么安全完成?Driver Store Explorer(RAPR)使用指南

Windows驱动清理怎么安全完成?Driver Store Explorer(RAPR)使用指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 一句话价值: 本文用一…

2026/8/16 15:09:30 阅读更多 →
接口自动化测试平台(ITP)操作说明

接口自动化测试平台(ITP)操作说明

1. 平台概述 接口自动化测试平台Interface Test Platform(ITP)是一款基于Web的自动化测试工具,主要用于接口测试、业务流程测试、测试任务管理等功能。平台提供了完整的用户权限管理、项目管理、环境配置、测试用例编写与执行、测试报告生成…

2026/8/16 15:08:29 阅读更多 →
流放之路Build规划终极指南:5分钟用Path of Building离线算出真实伤害

流放之路Build规划终极指南:5分钟用Path of Building离线算出真实伤害

流放之路Build规划终极指南:5分钟用Path of Building离线算出真实伤害 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 还在靠感觉点天赋、凭运气配装备&#…

2026/8/16 15:08:29 阅读更多 →

最新新闻

如何用免费工具 ZenTimings 彻底读懂 AMD 内存时序?3 大实战场景完整指南

如何用免费工具 ZenTimings 彻底读懂 AMD 内存时序?3 大实战场景完整指南

如何用免费工具 ZenTimings 彻底读懂 AMD 内存时序?3 大实战场景完整指南 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings ZenTimings 是一款专为 AMD Ryzen 平台设计的免费开源内存时序监控工具,它通过直…

2026/8/16 15:50:41 阅读更多 →
网易云NCM转MP3太麻烦?免费工具ncmdump拖一下就能解锁全部歌曲

网易云NCM转MP3太麻烦?免费工具ncmdump拖一下就能解锁全部歌曲

网易云NCM转MP3太麻烦?免费工具ncmdump拖一下就能解锁全部歌曲 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 网易云的NCM加密文件一旦离开客户端就放不出来,免费开源工具ncmdump专治这个毛病,把…

2026/8/16 15:50:41 阅读更多 →
Java byte数组与String互转:编码细节与踩坑记录

Java byte数组与String互转:编码细节与踩坑记录

做Java开发经常会碰到byte数组和String互转的场景,比如读写文件、处理网络报文的时候。看起来是基础操作,真踩过几次编码的坑之后,才发现里面细节挺多。最直接的写法是直接调用getBytes()和new String(),用的是当前运行平台的默认…

2026/8/16 15:50:41 阅读更多 →
如何用ZenTimings这台“内存CT机“看清AMD平台时序真相:完整使用指南

如何用ZenTimings这台“内存CT机“看清AMD平台时序真相:完整使用指南

如何用ZenTimings这台"内存CT机"看清AMD平台时序真相:完整使用指南 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings 深夜十一点,你刚在BIOS里把内存从3200MT/s拉到3600MT/s,怀着忐忑…

2026/8/16 15:50:41 阅读更多 →
YimMenu免费GTA5保护菜单快速上手教程:新手从下载到自保的完整指南

YimMenu免费GTA5保护菜单快速上手教程:新手从下载到自保的完整指南

YimMenu免费GTA5保护菜单快速上手教程:新手从下载到自保的完整指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Tren…

2026/8/16 15:50:41 阅读更多 →
诚信的 日照海边民宿 日照海边民宿

诚信的 日照海边民宿 日照海边民宿

到日照旅游,想找诚信靠谱海边民宿?这家值得一去许多人梦想着到日照海边旅游,享受阳光、沙滩和大海的美景。然而,在选择住宿时却常常犯难,尤其是担心遇到不诚信的商家,遭遇宰客、住宿条件差等问题。其实&…

2026/8/16 15:49:41 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →