前语

git-log 即检查 git 提交日志,本文会全面解析 git-log 运用并经过一个实在的 SpringBoot 项目进行实战。假如你是个技能管理者,你必定在乎手下做了什么,提了多少代码,是否有“佛祖保佑”,git-log 都能够帮你搞定。它还可帮前端训练组织你 code review,帮你 blame someone。你想 blame 吗?你想快速定位你的github代码吗?那就看看咱们的 git log 终究能做点啥吧。Le前端和后端的差异t’s Go~

概要

$ git log [<options>] [<revision range>] [[--] <path>…]
  • 本文会用到github中文社区以下两种指令做 demo,一种一般 log,一种单行闪现github中文官网网页 log

    # 一般log
    $ git log
    # 单行闪现
    $ git log --oneline
    

选项options

  • –follow:会追溯前史android下载,包含重命名前的记载

    $ git log -pgithub永久回家地址 gradle.properties
    # 不带 follow参数的状况下,git把名为gradle.properties的文件全部提交记载找出来
    $github是干什么的 git log -p -前端和后端哪个薪酬高-follow gradle.properties
    # 带follow参数的状况下,git会把当时以及重命名前的文件提交记载找出来
    
  • –no-dec前端和后端的差异orate:不闪现的所有提交的引证称谓

    $ git log --no-decoratgit指令e
    
    commit hash
    Author: caining <demo@gmail.cn>
    Date:  Tue Apr 20 11:10:53 2021 +0800
    develop2
    
  • –decorate[=shogithub中文官网网页rt|full|auto|no]:闪现的所有提交的引证称谓

    • 名词解释:Git Reference

      • Git Reference简写为refs
      • 本地分支的Reference格局:refs/heaappreciateds/<lapproveocalapp装置下载_branch_name>如refs/heads/master,在保证仅有的状况下能够简写为master;
      • 远程寻找分支的Reference格局:refs/remotes/<remote_repository>/前端工程师<remote_branch_name>:如refs/remotes/origin/master,在保证仅有的状况下能够简写为origin/master;
      • tag的Reference格局:refs/tags/<tag_name>:如refs/tags/v1.0.1,在保证仅有的状况下能够简写为v1.0.1
      • 特别refs-HEAD,指向当时本地分支的当时commit状况
      • 特别refs-FETCH_HEAD,指向当时本地分支在最近一次fapproachetch操作时得到的commit状况
      • 特别refs-ORIG_HEAD,指向任何merge或rebase之前的刚刚检出时的commit状况
    $ git log --decorate=full
    # 作用:HEAD -> refs/heads/develop , refs/remotes/origin/develo
    $ git log --decorate=short前端开发需求把握什么技能
    # 作用:HEAD -> develop, origigiti轮胎n/develop
    
  • –sourcgiteee:均闪现提交分支

    # 每个提交均闪现提交分支
    $ git log --oneline --source
    # 6256aa140       HEAAndroidD (HEAD ->android是什么手机牌子 develop, origin/develop) message
    
  • gitlablog-size:是该提交消息的长度(以前端和后端哪个薪酬高字节为单位)

    $ git log --oneline --前端和后端的差异log-size
    # commandroid下载装置it 625androidstudio装置教程6aa140f前端开发需求把握什么技能910d8github中文官网网页1eb71a7651aad1d6bc5128github永久回家地址da0 (HEAD -> develop, origin/develop)
    # log size 107
    # Author:github打不开 caining <oappreciateslankachina@gmail.com>
    # Date:  Thu Apr 22 09:59:29 2021 +0800
    # message
    
  • -L&ltappstore;sgiti是什么牌子tart>,<end>:<file>:检查某个文件某几行范围内的修改记载

    $ git log -L 1,1:README.md
    
  • -L:<funcname>:<file>:寻找一个函数的改变前史

    • 为了确android的drawable类保该指令实施有用,Git 需求知道哪些行是函数声明。Git有一套默许的正则表达式,可是因为言语比较多,默appearance许配备下前端和后端的差异或许遇到这种报错:fatal: -L parameter ‘test’ starting at line 1: noappreciate match
    • 分析原因:在某些言语中,Git 默许的正则表达式无法辨认该言语的函数初步和完毕前端开发需求把握什么技能标识导致无法匹配函数称谓
    • 解决方法
      • 项目下新建.gitattribut前端开发es文件 关于gitattributegiti是什么牌子s
      • 配备对应言语的diff*前端训练组织.java diff=java
    $ git log -L :tgithub中文官网网页est:app/src/main/java/cAPPom/cnn/androidmavenpackage/MainActivity.java
    

    浅显易懂git-log之代码计算实战

关键-选前端结构

  • 请留神,这些是在提交次第和格局设置选项(例如–revegithub中文官网网页rse)之前应用的。闪现提交日志,以下 a b c 均为提交节点 hash 值 commit 时刻 a < b < c )

    # 一般log
    $ git loggit教程
    # 单行闪现
    $ git log --onelinandroid是什么手机牌子e
    
    # 列出a到(画关键:了解^ 能够了解为from  前面大 后边小,..能够了解为to 前面小后边大)
    $ git log a..b
    $ git log b ^a
    
    #列出所有能够从a 到 b而不包含c之前的提交前端和后端的差异
    $ git log a b ^c
    
  • 数量挑选

    $ git log -3
    $ g前端开发需求把握什么技能it log -n3
    $ git log --maxapp装置下载-count=3
    # -<number> 
    # -n <number>
    # --max-count=<number&gapproacht;
    # --skip=<number>
    $ git log --skip=3 #越过3条记载
    
  • 时刻挑选

    $ git log --since='2021-04-02 00:00:00'
    # --since=<date&android手机gt;
    # --after=<date>
    $ git log --until='2021-github是干什么的04-02 00:00:00'
    # --until=<dandroid什么意思ate>
    # --before=<date>
    # 2周内的提交
    $ giapplicationt log --since=2.weeks = $ git log --since="2 weeks ago"
    # 2月前端学什么内的提交
    $ git log --since=2.months = $ git log --since="2 months ago"
    # 1年内的提交
    $ gigitlabt log --since=1.yeaandroid平板电脑价格r = $ git log --sin前端开发ce="1 year ago"
    
  • 作者挑选

    $ git log --authapproachor='caining'
    # --author=<pattern>
    # --committer=<applicationpattern>
    # 留神这儿是正则,含糊匹配,
    # 假如是多giti轮胎个人人一同查按下面
    $ git log -author="name1|name2|name3"
    
  • 提交描绘挑选

    $ git log --grep='bug fix'
    $ git log -i --grep="message1|mesgithub直播渠道永久回家sage2"
    # --grep=<pattern>
    # 关键1: --all-match 能够了解为sql-and与 --grep 至少有一个匹配的提交 例如与-author混用github下载
    $ git log --author='caininGitg' -github直播渠道永久回家-all-match --grep='bug fix'
    # 关键2: --invert-grep 用法同上,能够了解为sql not --grep 至少有一个不匹配的提交 例如与-author混用时
    $ git log --author='caining' --inappearancevert-grep --grep='github直播渠道永久回家bug fix'
    #上句了解: 为caining 提交的 可是 描绘里不包含 bug fixandroid体系的 提交androidstudio装置教程内容
    
  • 代码内容查找 -S,留神这个查找或许很耗时。

    $ git log -S hellgithub敞开私库o
    

浅显易懂git-log之代码计算实战

  • 多条件混合挑选android/yunos

    $ git log --since=1.year --author='ca前端训练组织ining' --grep='获取' -3
    

浅显易懂git-log之代码计算实战

for前端学什么mat与款式

  • android平板电脑价格pretty[=<format>

  • –date=<format>:--date=relative``--date=local``--date=default-local.--date=android是什么手机牌子iso --date=iso8601``--date=rfc``--date=short``--date=rfc2822

    日期格局化

  • –parents

    闪现提交的爸爸妈妈节点

  • –children

    闪现提交github的孩子节点

  • –graph

    android平板电脑价格-graph like this浅显易懂git-log之代码计算实战

  • git log –pretty=format 已存在款式包含 oneline,short, mediuandroid平板电脑价格mgitee, full, fuller, reference, em前端开发需求学什么ail, raw

    $ git log --pretty=oneline
    # 款式:
    # <hash> <title line>
    
    $ git log --pretty=short
    # 款式:
    # commit <hasgithub中文官网网页h>
    #前端面试题 Author: <author>
    # <titlegiti line>
    
    $ git log --pretty=medium
    # 款式:
    # cogithub中文社区mmit <hash>
    # Author: <author>
    # Date:   <authogithub永久回家地址r dagithub敞开私库tAPPe>
    # <title line>
    # &l前端开发需求学什么t;fullapple commit message>
    
    $ git log --pretty=full
    # 款式:
    # commit <hash&gt前端工程师;
    # Author: <author>
    #前端学什么 Commit: <committer>
    # <title line>
    # <full commit messageAndroid>
    
    $ git log --pretty=fugithub是干什么的ller
    # 款式:
    # commit <hash>
    # Author:     <author>
    # AuthorDate: <author前端开发需求学什么 date>
    # Commit:     <committer>
    #github是干什么的 ComGitmitDate: <committer date>
    # <tit前端开发需求把握什么技能le line&gAPPt;
    # <full commit message>
    
  • 自定义git前端开发需求把握什么技能 log –graph –pretty=format:”

    #%Crappointmented	切换至赤色
    #%Cgreen	切换至绿色
    #%Cblue	切换至蓝色
    #%C(yellow)切换至黄色
    #git指令%Creset 重设颜色
    $ git log --graph --pretty=fo前端和后端的差异rmat:'%Cred%h%Cr前端和后端哪个薪酬高eset -%C(yellow)%d%Cgithub中文官网网页reseappreciatet %s %Cgithub敞开私库green(%cr) %C(bold blue)&ltappearance;%an>%Creset' --abbrev-commit
    

浅显易懂git-log之代码计算实战

  • format支撑的类型如下,以%初步:

    # %H:无缺哈希字串giti轮胎
    # %h:简略哈希字串github直播渠道永久回家
    # %T:树政策(tree)的无缺哈希字串
    # %t:树方gitee针的简略前端学什么哈希字串
    # %P:父政策(parent)的无缺哈希字串
    # %p:父政策的简略哈希字串
    # %an:作者(author)的名字
    # %aN:作者(author)的名字 (respecting .mailmap, see [git-shortlog[1]](https://git-scm.com/docs/git-shortlog) or [git-blame[1]](https://git-scandroid体系m.com/docs/git-blame))
    # %ae:作者电子邮件
    # %aE:作者电子邮件 (respecting .mailmap, see [前端git-shortlog[1]](https://git-scmapplication.com/docs/git-shortlog) or [git-blame[1]](https://git-scm.com/docs/git-blame))
    # %al:作者电子邮件的本地部分(@号之前的部分)
    # %aL:authgithub怎么下载文件or local-part (see *%al*) respecting .mailmap, see [git-shortlog[1]](https://git-scm.com/docs/git-shortlog) or [git-blame[1]](https://git-scm.com/docs/git-blame))
    # %ad:作者日期android平板电脑价格 (format respects --date= option)
    # %aD:author date, RFC2822 style
    # %ar:作者日期,相对
    # %at:作者日期,UNIX时刻戳
    # %ai:author date, ISgithub永久回家地址O 8601-like format -作者日期,相似IS0 8601的格局
    # %aI:autandroid的drawable类hor前端学什么 date, striGitct ISO 8601 format - 作者日期,严厉的lS0 8601格局
    # %as:作者日期,短格局(YYYY-MM-DD)
    #Git %github打不开cn:提交者称谓
    # %cN:committer name (respecting .mailmap, se前端开发需求学什么e [git-shortlogithub官网g[1]](https://git-scm.com/docs/git-shortlog) or [git-blame[1]](https://git-scm.com/docs/android平板电脑价格git-blame))
    # %ce:提交者电子邮件
    # %c前端面试题E:commiandroid/yunostter email 
    # %cl:committer email local-part 
    # %cL:committer local-part 
    # %cd:c前端开发ommitter date (format respects --date= option)
    # %cD:committer date, RFC2822 style
    # %cr:committer dAPPate, relative
    # %ct:commitandroid的drawable类ter date, UNIX tim前端面试题estamp
    # %ci:committer date, ISO 8601-like format
    # %cI:commitappearanceter date, strict ISO 8601 format前端训练组织
    # %cs:committer date, short format (`YYYY-MM-DD`)
    #gitee %s:message
    $ git log  --graph --pretty=format:'提交:-:%Cred%h%Creset;%Cgreen日期:-:%ar%Creset;%Cblue日期at:-:%at%Cresgithub怎么下载文件et;%C(yellow)日期ai:-:appearance%ai%Creset;%Cred日期ad:-:%ad%Cr前端和后端哪个薪酬高eset;%Cblue前端和后端哪个薪酬高作者an:-:%an%Crese前端开发需求学什么t;%C(yellow)作者aN:-:%aN%Creset;%Cgreen邮箱ce:-:%ce%Cresete:androidstudio装置教程-:%e;s前端和后端的差异ssss:-:%Cred%s%Creset;SSSS:-:%S;f-appear%f%n'
    

浅显易懂git-log之代码计算实战

gitgitee shortlog–核算

# 默许以奉献者分组进行输出
$ gitandroid/yunos shortlog
# 列出提交者代码奉献数量, 打印作者和奉献数量
$ git shortlog -sn==git shortlog -s -n
$ git log --pretty='%an' | sort | uniq -c | sort -k1 -n -r | head -n 10
#-s 参数省掉每次 commit 的注释,只是回来一个简android手机略的核算。
#-n 参数依照 commit 数量从多到少的顺利对用户进行排序
# 以提交奉献数量排序并打印出message
$ git shortlog -n
# 选用邮箱格局化的方式进行检查奉献度
$ git sapplicationhortlog -e
$ git shgithub怎么下载文件ortlog -sn==git shortlog -sapp装置下载 -n
# &&
$ git log --pretty='%an' | sort | uniq -c | sort -k1 -n -r | head -n 10

浅显易懂git-log之代码计算实战

git blame–查github提交

# 查application看 README.md 文件的修改前史记载,包含时刻、作者以及内容
git blGitame README.md
# 检查谁改动了 README.md 文件的 11行-12行
git blame -L 11,12 README.md
git blame -L 11 READ前端和后端的差异ME.md   #android体系 检查第11行往后
# 闪现无缺的 hash 值
git blam前端结构e -l README.md
# 闪现修改的行数
git blamegithub永久回家地址 -n README.md
# 闪现作者邮github中文官网网页
git blame -e README.md
#android下载装置 对参数android是什么手机牌子进行一个组合查询
git blame -enlandroid手机 -L 11 README.md

实战项目

  • 首要咱们是要做一个 【Git代码年报总结/年度代码账单】核算类项目,思路参看某宝的【花钱账单】或许某音乐云的【听application歌账单】

  • 根据需求导出所需求的提交日志内容to本地文件

    $ git log --date=iso --pretty=format:’"appointment%h","%an","%ad","%s","%ce"’ >&gtgit教程; ~/Desktogithub怎么下载文件p/commit.csv
    $ git log  --date=isoappearance --pretty=format:’"%h","%ar","%at","%ai","%ad","%an","%aN","%前端训练组织ce","%e","%s",android的drawable类"%S","%f"android下载装置 >gitee> ~/DesktGitHubop/commit.csv
    $ git log --date=iso --pretty=format:’"项目-demo","%github中文官网网页H","%h","%an","%ae","%at","%ad","%s"’ >> ~/Desktogiteep/项目-demo.csv
    #%H:无缺哈希%h:简略哈希%an:作者%ae:邮件 %at:作者日期,UNIX时刻戳"%ad","%s"
    # 咱们根据 git shortlog -sgithub永久回家地址n,核算出排名,然后检查 Yangkai.Shen,yanggithub打不开kai.shen的代码行数
    $ git log --authGitor="Yangkai.Shen|yangkai.shen" --pr前端开发etty=tformat: --numstat | awk '{ add += $1前端和后端的差异 ; subs += $2 ; loc += $1 - $2 } END { printf "增加的行数:%s 删去的行数:%s 总行数: %sn",add,sgithub直播渠道永久回家ubs,loc }'&gtandroid的drawable类;> ~/Desktop/项目-d前端开发emo_code.csv
    # 增加的行数:133582 删android下载装置去的行数:77429 总行数: 56153
    git log --author="Yangkaandroid体系i.Shen|yangkai.shen" --gitlabprettapp装置下载y前端训练组织=tformat: --nums前端开发需求把握什么技能tat | awk '{ add += $1 ; subsapplication += $2 ; loc += $1 - $2 } END { pr前端训练组织intf "%s,%s,%s,%sn",add,subs,loc,"Yangkai.Shen" }'>> ~/Desktop/项目-demo_code.csv
    #658  Yaappearancengkai.Shen
    #    57  yangkai.shen
    #     4  fxbin
    #Android     3  EchoCow
    #     2  chenqi
    #    1  yaod前端面试题ehuang
    #     1前端工程师  76peter
    #     1  yiapprovedasanappointmentqian
    #     1  UndefinedDiary
    #     1  geekandroid体系
    #     1  taffier
    #     1  yanshaoshuai
    

浅显易懂git-log之代码计算实战

  • 运用Python 脚本循环读取作者,能够获取各个作者代码数量,组装为json前端和后端哪个薪酬高,并导出,要害代码如下:
if __name__ == '__main__':
p = subprocess.giti是什么牌子Popen("git log --pretty='%an' | sort | uniq -c | sort -k1 -n -r | head -n 10", shell=True,
cwd='/Users/caining/Documeandroid下载装置nts/demo/spring-boot-demo', stdout=subprocess.PIPE)前端训练组织
out, err = p.communicate()
value = str(out, encoding="utf-8")
arr =github value.split("n")
sgithub直播渠道永久回家ubprocess.Popen('printf [ >> ~/Desktop/项目-demo_code1.csv', shell=AndroidTrue,
cgitlabwd='/Users/cainigiting/Documenappreciatets/demo/spring-boot-demo')
for a inapp装置下载 arr:
if len(a.split(" ")) >= 2:
name = a.split(" "android平板电脑价格)[len(a.split(" ")) - 1]
author = name
subprocess.Popen(
'printf {"name":"' + author + '","score":" >> ~/Desktop/项目-demo_code1.csv', shell=True,
cwd='/Users/caining/Documentgit教程s/demo/spring-boo前端t-demo')
cmdd = 'git loAndroidg --author='' + author前端训练组织 + '' --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ' 
'; loc += $1 - $2 } END 'android什么意思 
'{ printf "%s,%前端学什么s,%s",add,subs,loc }'>前端和后端的差异> ~/Desktop/项目-demo_code1.csv'
p = subappstoreprocess.Popen(cmdd, shell=True, cwd='/Usgithub是干什么的ers/caining/Documents/demo/sprandroid是什么手机牌子ing-boot-demo')
out, err = p.communic前端结构ategit指令()
subprocesappointments.Popen('pringithub直播渠道永久回家tf "}, >> ~/Desktop/项目-demo_code1.csv', shell=True,
cwd='/Users/caining/Documents/demo/spring-boot-demo')
subprocess.Popandroid平板电脑价格en('printGitHubf {}] >> ~/Desktop/项目-demo_code1.csv', shell=True,
cwd='/Users/caining/Docu前端ments/demo/spring-bootgithub敞开私库-demo')
  • 实施完结果如下:
[
{
"name":"Yangkai.Shen",
"score":"124483,76983,47500"
},
{
"name":"git教程yangkai.sandroid手机hen",
"score":"9099,446,8653"
},
{
"name":"fxbin",
"score":"2902,216,2686"
},
...
]

浅显易懂git-log之代码计算实战

  • 树立springBoot 项目浅显易懂git-log之代码计算实战
  • 编写upload上传接口,并集成swagger2浅显易懂git-log之代码计算实战
  • Upandroid是什么手机牌子load to mysql 保证数据的无缺性,对比后正确

浅显易懂git-log之代码计算实战

  • spring to mysql 要害代码前端和后端哪个薪酬高如下
try {
InputStream inputStreamappreciate = file.getIgithub中文社区nputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
String str = null;
while((str = br.readLine()) != null){
String[] split = str.split("n");
int len = split.length;
List<GitLog> gitLogList = new Aandroid的drawable类rrayList<>();
for (int j = 0; j < len; j++) {
S前端开发需求把握什么技能tring[] split1 = split[j].split(",");
try {
String commiappeart_id_long = split1[1];
GitLog oneById = ggiti是什么牌子itDao.findgit指令OneById(commit_id_long);
GitLog gitLog = new GitLog()
.setProject(splitgithub1[0].replace("’", ""))
.setCommit_id_long(commit_id_long)
.setCommit_id(split1[2])
.setAuthor(split1[3])
.setEmail(split1[4])
.setTime_stamp(Long.valueOf(split1[5]))
.setTime(split1[6].replace("+0800", ""))
.setMessage(split1[7].replace("’", ""));
if (oneById != null) {
gitDao.upgit教程date(gitLog);
} else {
gitLogList.add(gitLog);
}
} catch (Exception e) {
e.printStackTrace();
}
}
gitDao.insertLisandroid是什么手机牌子t(gitLoandroid体系gList);
}
} catchgitlab (IOExceptiogitin e) {
e.printStackTrgithub怎么下载文件ace();
}
  • 存入mysql 后,愈加便利核算,除了根底代码量核github怎么下载文件算外,存入m前端和后端哪个薪酬高ysql 长处如下:
    • 能够核算同一个用户不同author状况
    • 能够核算不同email相同author状况
    • 能够核算最晚时刻
    • 能够核算当日提交最多提交数等
    • 重复author lgit教程ike thandroidstudio装置教程is:浅显易懂git-log之代码计算实战
    • 其他核算(全年某日最多提交次数、全年总提交次数、全年提交次数排名、全年某日最晚提交(加班最晚时刻点提交)、全年加班APP提交次数等核算)浅显易懂git-log之代码计算实战
SELECT COUappleNT(*) as 总提android/yunos交次数 FROM git_log ORDER BY time_stamp ASC;
SELECT DATE_FORMAT(time,"%Y年%m月") A前端学什么S 月份,COUNT(*) as 提交次数 FROM git_log Ggit指令ROUP BY DATE_FORMAT(time,"%Y年%m月")
SELECT DATE_FORMAT(time,"%前端结构Y年%m月%d日") AS 日期,COUNT(*) as 提交次数giti FROM git_log GROUP BY DATE_FORMAT(time,"%Y年%m月%d日") ORDER BY 提交次数 DESC;
--s前端学什么ql 其giti轮胎approve相关脚本略。。。以上sql脚本 只是举个栗子,进行中,这儿不影响本篇文章。
  • 整体来说,运用 sql 超强核算才能+git-logandroid什么意思 本身代码核算giti是什么牌子才能,能够做到咱们想做的项目:【Git代android手机码年报总结/年度代码账单】

  • 作者个人根本脚本以及简略后端初步构成,github永久回家地址后边方案结合前端界面,前端担任炫酷,完结本项目,项目规划中android什么意思,感兴趣同学欢迎一同议论;come on baby!

  • 到此androidstudio装置教程项目后端以及预备阶github段脚本已初步构成,差详细接口开发以及前端开发需求把握什么技能核算

总结

  • git log 根底知识,format 很健壮,款式也很多样

  • git shortlog 根底知识&git blame 根底知识

  • 项目实战结合了mysql+spring boot,便利核算

  • git 指令导出脚本运用了python 便利循环导出作者所写代码数量

  • mysql 其他脚本进行中

  • 后期小程序或许web界面树立进行中

  • 议论@QiShare

引证

  • git-scm.com/docs/git-lo…
  • git-scm.com/docs/ggiti是什么牌子it-bl…
  • git-scm.com/android是什么手机牌子docs/git-approvesh…
  • gigithub是干什么的t-scm.com/docs/gitatt…
  • 本项目后端代码&&项目核前端和后端的差异算源参看:github.com/xgiteekcoding/sp…