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

mysql重置root密码

Step 1 — Identifying the Database Version
Most modern Linux distributions ship with either MySQL or MariaDB, a popular drop-in replacement which is fully compatible with MySQL. Depending on the database used and its version, you’ll need to use different commands to recover the root password.
You can check your version with the following command:

mysql –version
Copy
You’ll see some output like this with MySQL:

MySQL output
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Or output like this for MariaDB:

MariaDB output
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Make note of which database and which version you’re running, as you’ll use them later. Next, you need to stop the database so you can access it manually.
Step 2 — Stopping the Database Server
To change the root password, you have to shut down the database server beforehand.
You can do that for MySQL with:

sudosystemctl stop mysql
And for MariaDB wtih:

sudosystemctl stop mariadb

After the database server is stopped, you’ll access it manually to reset the root password.
Step 3 — Restarting the Database Server Without Permission Checking
If you run MySQL and MariaDB without loading information about user privileges, it will allow you to access the database command line with root privileges without providing a password. This will allow you to gain access to the database without knowing it.
To do this, you need to stop the database from loading the grant tables, which store user privilege information. Because this is a bit of a security risk, you should also skip networking as well to prevent other clients from connecting.
Start the database without loading the grant tables or enabling networking:

sudomysqld_safe –skip-grant-tables –skip-networking &

The ampersand at the end of this command will make this process run in the background so you can continue to use your terminal.
Now you can connect to the database as the root user, which should not ask for a password.

mysql -uroot
Copy
You’ll immediately see a database shell prompt instead.
MySQL prompt
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
MariaDB prompt
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
MariaDB [(none)]>
Now that you have root access, you can change the root password.
Step 4 — Changing the Root Password
One simple way to change the root password for modern versions of MySQL is using the ALTER USER command. However, this command won’t work right now because the grant tables aren’t loaded.
Let’s tell the database server to reload the grant tables by issuing the FLUSH PRIVILEGES command.

FLUSH PRIVILEGES;非常关键,必须先执行这个,然后执行后面的语句才有效
Now we can actually change the root password.
For MySQL 5.7.6 and newer as well as MariaDB 10.1.20 and newer, use the following command.

ALTER USER’root’@’localhost’IDENTIFIED BY ‘new_password’;
Copy
For MySQL 5.7.5 and older as well as MariaDB 10.1.20 and older, use:

SET PASSWORD FOR ‘root’@’localhost’=PASSWORD(‘new_password’);
Copy
Make sure to replace new_password with your new password of choice.
Note: If the ALTER USER command doesn’t work, it’s usually indicative of a bigger problem. However, you can try UPDATE … SET to reset the root password instead.

UPDATE mysql.user SET authentication_string =PASSWORD(‘new_password’)WHERE User =’root’AND Host =’localhost’;
Copy
Remember to reload the grant tables after this.
In either case, you should see confirmation that the command has been successfully executed.

Output
Query OK, 0 rows affected (0.00 sec)
The password has been changed, so you can now stop the manual instance of the database server and restart it as it was before.
Step 5 — Restart the Database Server Normally
First, stop the instance of the database server that you started manually in Step 3. This command searches for the PID, or process ID, of MySQL or MariaDB process and sends SIGTERM to tell it to exit smoothly after performing clean-up operations. You can learn more in this Linux process management tutorial.
For MySQL, use:

sudokillcat/var/run/mysqld/mysqld.pid
Copy
For MariaDB, use:

sudokill/var/run/mariadb/mariadb.pid
Copy
Then, restart the service using systemctl.
For MySQL, use:

sudosystemctl start mysql
Copy
For MariaDB, use:

sudosystemctl start mariadb
Copy
Now you can confirm that the new password has been applied correctly by running:

mysql -uroot -p
Copy
The command should now prompt for the newly assigned password. Enter it, and you should gain access to the database prompt as expected.
Conclusion
You now have administrative access to the MySQL or MariaDB server restored. Make sure the new root password you choose is strong and secure and keep it in safe place.

如何编译 LibreOffice

一、安装编译环境依赖
$ sudo dnf builddep libreoffice
$ sudo. dnf install. ccache # 安装 ccache,从而能够在重新编译时复用之前编译的缓存以加速编译。您也可以不用ccache$ ccache -M 10G # 将 ccache 缓存大小限制设置为 10G$ ccache –set-config=cache_dir=# 若空间不足,可将 ccache 的缓存目录设置为其他的位置(比如挂载的其他分区目录)$ sudodnf installpatch avahi-devel # builddep 没有安装好这两个编译依赖的包$ sudodnf installfakeroot rpm-build # 若您需要 rpm 或 deb 格式的安装包,则需要安装这两个依赖项
二、克隆源代码及子模块(git clone)
首先克隆主代码。此处克隆 libreoffice-7-1 分支。克隆时,因为我只需要最新的源代码(不需要历次的所有commit),因此使用了depth=1选项。
$ gitclone –depth=1–branch libreoffice-7-1 git://go.suokunlong.cn/lo/core ./libreoffice-7-1
正克隆到 ‘./libreoffice-7-1’…
remote: 枚举对象: 120360, 完成.
remote: 对象计数中: 100% (120360/120360), 完成.
remote: 压缩对象中: 100% (86011/86011), 完成.
remote: 总共 120360(差异 46040),复用 87907(差异 32504)
接收对象中: 100% (120360/120360), 272.72MiB |9.36MiB/s, 完成.
处理 delta 中: 100% (46040/46040), 完成.
正在更新文件: 100% (120889/120889), 完成.
然后,配置子模块。若不进行如下配置,则若启用中文用户界面选项,会默认去git.libreoffice.org克隆子模块代码,速度较慢并且无法观察克隆进展:
$ cdlibreoffice-7-1/
$ gitsubmodule init
子模组 ‘dictionaries’(https://git.libreoffice.org/dictionaries)已对路径 ‘dictionaries’注册
子模组 ‘helpcontent2’(https://git.libreoffice.org/help)已对路径 ‘helpcontent2’注册
子模组 ‘translations’(https://git.libreoffice.org/translations)已对路径 ‘translations’注册
我们编译时只需要 translations 子模块,没有启用帮助及词典,因此到 .git/config 中将 dictionaries 和 helpcontent2 两个子模块删除。然后,将translations模块的url修改为国内镜像地址(比如 git://go.suokunlong.cn/lo/translations),以加快克隆速度。
然后,抓取子模块。此处使用 –depth=1 选项以只获取最新的翻译字符串,并且使用 –progress 选项以显示克隆进展。
$ gitsubmodule update –progress –depth=1正克隆到 ‘/home/suokunlong/build/lo/libreoffice-7-1/translations’…
remote: 枚举对象: 45290, 完成.
remote: 对象计数中: 100% (45290/45290), 完成.
remote: 压缩对象中: 100% (11030/11030), 完成.
remote: 总共 45290(差异 22278),复用 37455(差异 14997)
接收对象中: 100% (45290/45290), 107.72MiB |7.20MiB/s, 完成.
处理 delta 中: 100% (22278/22278), 完成.
remote: 总共 0(差异 0),复用 0(差异 0)
remote: 枚举对象: 14403, 完成.
remote: 对象计数中: 100% (14403/14403), 完成.
remote: 压缩对象中: 100% (3316/3316), 完成.
remote: 总共 11565(差异 5892),复用 9773(差异 4229)
接收对象中: 100% (11565/11565), 89.61MiB |3.06MiB/s, 完成.
处理 delta 中: 100% (5892/5892), 完成 155个本地对象.
来自 git://go.suokunlong.cn/lo/translations

  • branch 4a12b40c8751323705d82539be43d04990f934a9 ->FETCH_HEAD
    子模组路径 ‘translations’:检出 ‘4a12b40c8751323705d82539be43d04990f934a9’
    最后,获取 external_tarballs. 这是 libreoffice 在编译时使用的第三方库等包,默认是从境外服务器去抓取,速度很慢。我已将常用的包放在了境内服务器,您需要从以下位置下载。可以使用下载器一次性全部下载,或者在下面的 make 阶段根据终端输出再去仅下载需要的文件。下载的文件请放置到下列autogen.input中设定的路径下。
    https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs/
    三、配置编译选项(autogen.input)
    你可以不指定编译选项,直接按照下一部分介绍的 autogen.sh命令生成makefile,这样做就会按照默认的编译选项进行。你也可以将编译选项作为autogen.sh运行时的参数传递给它,这种情况下就会使用命令行参数作为编译选项。
    但最方便的是通过autogen.input来设置编译选项。这个文件仅在不存在任何命令行参数时才会生效。在克隆的源代码根目录下建立 autogen.input 文件,内容如下。完整的编译配置选项及其含义,见源代码根目录下的configure文件。

我一般直接在线浏览帮助文档,因此将帮助禁用了–without-help

–without-helppack-integration

启用简体及繁体中文用户界面–with-lang=zh-CN zh-TW

自己编译的话在线更新及崩溃报告功能就没啥用了,禁用–disable-online-update

–disable-breakpad

禁用 Office Development Kit。若启用 ODK,则额外需要doxygen依赖项。–disable-odk

–without-doxygen

若编译好之后您需要rpm (或deb)包,则需要启用下列两项:–enable-epm

–with-package-format=rpm

若您需要在多个不同版本的编译之间共享external_tarballs第三方源代码包,则可设置下列选项:# –with-external-tar=# 现在很多功能都用不到java了,因此我直接将其禁用–without-java

我需要用到firebird数据库,因此启用–enable-firebird-sdbc

–without-system-firebird
–enable-python=internal
四、编译(autogen.sh && make)
在源代码根目录下运行 autogen.sh。该脚本会调用 autogen.input中定义的编译选项。
./autogen.sh
若提示缺少某个包,则很可能是需要手动安装这个包的devel版本。若看到如下的提示,则表示autogen.sh运行无错误:


To build, run:
/usr/bin/make
To view some help, run:
/usr/bin/make helpAfter the build has finished successfully, you can immediately run what you built using the command:
instdir/program/soffice
If you want to run the smoketest, run:
/usr/bin/make check


此时就可以运行 make 命令进行编译了:
make
此时,若提示正在从 dev-www.libreoffice.org 下载各种包,但墙内速度很慢的情况下,可以按下 Ctrl-C键中断,然后手动从我的墙内缓存链接下载,并放入 –with-external-tar 编译选项指定的目录。也可以从其他任何地方下载,比如提示下载 Python-3.7.7.tar.xz 时也可以从 http://npm.taobao.org/mirrors/python/3.7.7/ 下载。
编译比较耗时。按照官方wiki上的说法,首次编译大约耗时约 = 8小时 / cpu核心数,后续更改源代码后增量编译耗时从几秒钟到几小时不等,取决于代码更改的程度。若需要频繁重新编译,则安装ccache包是个不错的选择,autogen.sh若检测到你安装了ccache则会自动启用。你也可以用icecream等分布式编译方式加速编译。
编译完成后,执行 .instdir/program/soffice 即可运行。若在autogen.input 中启用了 “–with_package_format=rpm deb” ,则生成的安装包在 workdir/installation中。

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”

excel转markdown

源码和下载:

0.1.3

特性

  • 转换Excel表格到MarkDown表格
  • 支持Excel单元格带超链接,如果一个单元格,你右键添加了超链接,自动转成[text](url)
  • 如果Excel里有合并的跨行单元格,在转换后的MarkDown里是分开的单元格,这是因为MarkDown本身不支持跨行单元格
  • 如果Excel表格右侧有大量的空列,则会被自动裁剪,算法是根据前100行来检测并计算
  • 支持指定小数数字的精度
  • 支持使用表格首行代替表头(保持空表头)
  • 支持指定对齐方式

常规用例,文件转换

Mac OS 版本请在命令行下直接使用exceltk,不用带exe后缀,MacOS的安装包自动配置好环境变量

  • 整个表格
    • exceltk.exe -t md -xls xxx.xls
    • exceltk.exe -t md -xls xxx.xlsx
  • 指定sheet
    • exceltk.exe -t md -xls xx.xls -sheet sheetname
    • exceltk.exe -t md -xls xx.xlsx -sheet sheetname
  • 指定小数数字的精度,例如指定精确到小数点后2位数字
    • exceltk.exe -t md -p 2 -xls xxx.xls

解决在移动设备上表格不能自适应的问题

通过指定-bhead 选项解决,使用表格首行代替表头,表头用空的代替:

exceltk.exe -t md -bhead -xsl test.xsl

输出如下风格的markdown:

||||||||||||||
|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|:–|
|**姓名**|**序号**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|**积点和**|
|某某某|34|6.86|6.86|6.86|6.86|6.86|6.86|6.86|6.86|6.86|6.86|6.86|

效果如下:

姓名序号积点和积点和积点和积点和积点和积点和积点和积点和积点和积点和积点和
某某某346.866.866.866.866.866.866.866.866.866.866.86

指定对齐方式

exceltk -t md -a r -xls example.xlsx

-a 参数指定对齐方式,可选参数是l,c,r,分别是左对齐、居中对齐、右对齐

通过代理访问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

腾讯云图