Git代码行统计命令集

查看git上个人代码量
git log –author=”username” –pretty=tformat: –numstat | awk ‘{ add += $1; subs += $2; loc += $1 – $2 } END { printf “added lines: %s, removed lines: %s, total lines: %s\n”, add, subs, loc }’ –
统计每个人的增删行数
git log –format=’%aN’ | sort -u | while read name; do echo -en “$name\t”; git log –author=”$name” –pretty=tformat: –numstat | awk ‘{ add += $1; subs += $2; loc += $1 – $2 } END { printf “added lines: %s, removed lines: %s, total lines: %s\n”, add, subs, loc }’ -; done
查看仓库提交者排名前 5
git log –pretty=’%aN’ | sort | uniq -c | sort -k1 -n -r | head -n 5
贡献者统计:
git log –pretty=’%aN’ | sort -u | wc -l
提交数统计:
git log –oneline | wc -l
统计代码总行数:
find . -name “.m” -or -name “.h” -or -name “.xib” -or -name “.c” |xargs grep -v “^$”|wc -l

统计某人的代码提交量,包括增加,删除:
git log –author=”$(git config –get user.name)” –pretty=tformat: –numstat | gawk ‘{ add += $1 ; subs += $2 ; loc += $1 – $2 } END { printf “added lines: %s removed lines : %s total lines: %s\n”,add,subs,loc }’ –
仓库提交者排名前 5(如果看全部,去掉 head 管道即可):
git log –pretty=’%aN’ | sort | uniq -c | sort -k1 -n -r | head -n 5
仓库提交者(邮箱)排名前 5:这个统计可能不会太准,因为很多人有不同的邮箱,但会使用相同的名字
git log –pretty=format:%ae | gawk — ‘{ ++c[$0]; } END { for(cc in c) printf “%5d %s\n”,c[cc],cc; }’ | sort -u -n -r | head -n 5
贡献者统计:
git log –pretty=’%aN’ | sort -u | wc -l
提交数统计:
git log –oneline | wc -l
添加或修改的代码行数:
git log –stat|perl -ne ‘END { print $c } $c += $1 if /(\d+) insertions/;

git log 参数说明:
–author 指定作者
–stat 显示每次更新的文件修改统计信息,会列出具体文件列表
–shortstat 统计每个commit 的文件修改行数,包括增加,删除,但不列出文件列表:
–numstat 统计每个commit 的文件修改行数,包括增加,删除,并列出文件列表:

-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
例如:git log -p -2
–name-only 仅在提交信息后显示已修改的文件清单
–name-status 显示新增、修改、删除的文件清单
–abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
–relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
–graph 显示 ASCII 图形表示的分支合并历史
–pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)
例如: git log –pretty=oneline ; git log –pretty=short ; git log –pretty=full ; git log –pretty=fuller
–pretty=tformat: 可以定制要显示的记录格式,这样的输出便于后期编程提取分析
例如:git log –pretty=format:””%h – %an, %ar : %s””
下面列出了常用的格式占位符写法及其代表的意义。
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
–since 限制显示输出的范围,
例如: git log –since=2.weeks 显示最近两周的提交
选项 说明
-(n) 仅显示最近的 n 条提交
–since, –after 仅显示指定时间之后的提交。
–until, –before 仅显示指定时间之前的提交。
–author 仅显示指定作者相关的提交。
–committer 仅显示指定提交者相关的提交。

一些例子: git log --until=1.minute.ago // 一分钟之前的所有 log git log --since=1.day.ago //一天之内的log git log --since=1.hour.ago //一个小时之内的 log git log --since=`.month.ago --until=2.weeks.ago //一个月之前到半个月之前的log git

log –since ==2013-08.01 –until=2013-09-07 //某个时间段的 log git blame
看看某一个文件的相关历史记录
例如:git blame index.html –date short

git rm移除版本管理

git rm与git rm –cached
当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用
1 git rm file_path
2 git commit -m ‘delete somefile’
3 git push
当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用
git rm –cached file_path //没有add操作,其他用户pull会删除
git commit -m ‘delete remote somefile’
git push

删除版本控制push之后会删除仓库的文件,其他用户pull 时也会删除,其他用户在pull之前应该先备份要删除的文件,然后再pull,合并之后再把文件还原回来

git rm –f “文件路径”,不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)

配置git send-mail发邮件

126邮箱配置通过测试。qq邮箱未通过测试,如果要用这个方法,请申请一个126邮箱账号。

安装git相关组件
apt-get install git git-core git-email

配置git
vim ~/.gitconfig
添加如下内容

[user]

name = 你的名字 <>
email = 你的邮箱名@126.com

[sendemail]


    from = 你的邮箱名@126.com
smtpserver = smtp.126.com
smtpuser = 你的邮箱名@126.com
smtpencryption = ssl
smtppass = 邮箱密码(客户端授权密码)
smtpserverport = 994
生成patch
echo xxxx > xxx.c
git add xxx.c
git commit -s -m "你的commit的名字"
git format-patch --cover-letter -M origin/master -o outgoing/

检查patch
修改patch直到没有errors和warings为止

./scripts/checkpatch.pl outgoing/0000-*
total: 0 errors, 0 warnings, 0 lines checked

./scripts/checkpatch.pl outgoing/0001-*
total: 0 errors, 0 warnings, 7 lines checked
修改patch

vim outgoing/0000-*
vim outgoing/0001-*

获取maintainer邮箱
./scripts/get_maintainer.pl drivers/pinctrl/pinctrl-xway.c <-你修改的文件所在的路径

Linus Walleij linus.walleij@linaro.org (maintainer:PIN CONTROL SUBSYSTEM)
linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM)
linux-kernel@vger.kernel.org (open list)

发送patch
git send-email 刚刚生成的patch文件名(outgoing/*) --to 目的地邮箱地址1,目的地邮箱地址2 (maintainer) --cc 目的地邮箱地址3,目的地邮箱地址4 (supporter/open list)
等待1分钟会看到反馈打印在终端,查看目的地邮箱可以收到邮件(可能在垃圾箱里)。

发送patch例子
以上实例可用如下命令发送

git send-email 刚刚生成的patch文件名(outgoing/*) --to linus.walleij@linaro.org  --cc linux-gpio@vger.kernel.org,linux-kernel@vger.kernel.org
注意:

–to的对象是maintainer。

–cc的对象是supporter和open list。

Git word docx版本控制

1、创建 .gitattributes 文件

在项目根目录或者全局home目录

*.docx diff=word 文件匹配

2、编辑 home/.gitconfig 或项目下.git/config

或者命令添加

git config –global diff.word.textconv docx2txt

[diff “word”]

        textconv = ./doc2txt

 git config –global alias.pandiff “diff –word-diff=color –unified=1”

通过代理访问ssh git

ssh -o “ProxyCommand nc -X 5 -x 192.168.4.20:1080 %h %p” root@172.19.6.131

git config http.proxy http://192.168.4.20:8080 http代理

git config http.proxy socks5://192.168.4.20:1080 http代理

curl -x ‘http://192.168.4.20:8080’ http://www.baidu.com

手机上开启http或者socket代理协议

设置代理
git config http.proxy ‘socks5://192.168.4.20:1080’
git config –global https.proxy ‘socks5://127.0.0.1:1080’
取消代理
git config –global –unset http.proxy
git config –global –unset https.proxy

git 代码量统计

增加的代码行数量

git log –stat|perl -ne ‘END { print $c } $c += $1 if /(\d+) insertions/’

精确的代码行修改数量:

git log –author=”$(git config –get user.name)” –pretty=tformat: –numstat | gawk ‘{ add += $1 ; subs += $2 ; loc += $1 + $2 } END { printf “added lines: %s removed lines : %s total lines: %s\n”,add,subs,loc }’

上面不行就这个:

git log –pretty=tformat: –numstat | gawk ‘{ add += $1 ; subs += $2 ; loc += $1 + $2 } END { printf “added lines: %s removed lines : %s total lines: %s\n”,add,subs,loc }’ 

腾讯云图