git bisect 自动二分法查询错误提交第一次出现的时间

git bisect 命令教程

主要操作步骤:
1. git bisect start [终点commitid] [起点commitid]
此时会自动二分法切换代码到最中间的那次commit
2. 验证代码是否正确:
正确: git bisect good
错误: git bisect bad
循环操作第二步,二分法最后会让你找到出现问题的那一次提交

git log用法技巧(python)

git详尽的官方文档
git log官方文档
使用alias自定义输出
git log –pretty=oneline a.c
git log –oneline a.c

【清单方式展示每个文件修改行数】(不会汇总所有文件的信息)
git log –pretty=tformat: –numstat

【统计两个提交(或分支)间的差异清单】
git diff commit_1 commit_2 –stat 展示的是相对路径,末尾有所有文件修改行数的汇总信息
git diff commit_1 commit_2 –numstat 展示的是绝对路径,有每个文件修改行数的明细信息

【踩坑笔记】:
git log “–all”参数可以实现一个仓库所有分支的统计
在python字段串里,如果想调用的git命令行包含了大括号,像: ${remote#origin/}, 初始化变量时要写为 ${{remote#origin/}},否则python会报 KeyError 的错

gitk — a.c 以图形格式展示文件的提交历史

git show commit_id 查看变更内容

查看当前目录下的提交记录,保存在llog10.txt中:
git log -n 10 –stat . > log10.txt
参数: -n 表示最近几次提交,例如:-n 10表示最近10次提交

git log 格式化输出各参数含义:
git log展示过滤技巧
举例:git log –pretty=format:” %an “就只展示每个提交的作者名称

查看所有本地的git 配置:
git config –list

GIT【代码掌控度统计】【按作者统计】【按文件类型统计】
参考文章
git log –author=xxxx –since=2021-09-01 –until=2021-12-31 –format=’%aN’ | sort -u | while read name; do echo -en “$name\t”; git log –author=”$name” –pretty=tformat: –numstat | grep “\(|.c++\|.h\|.pro\)$” | awk ‘{ add += $1; subs += $2; loc += $1 – $2 } END { printf “added lines: %s, removed lines: %s, total lines: %s\n”, add, subs, loc }’ -; done

【相关python脚本】
Python实现一个Git日志统计分析的小工具
python-gitlab 统计代码行数

GitPython官方文档
gitpython接口演示1 接口演示2

git commit 丢失 踩坑

已经帮3个团队排查过git commit记录丢失的事情,虽然可以通过 git log –online 结合git reset –hard 使用二分法定位出是哪个commit导致的记录丢失,但一直未找到复现问题的方法。
网上查询,发现是如果场景:
user2 git pull远端上的最新代码,假设合并到本地当前分支,有100个文件有更新
user2实际自己只改了10个文件,为了谨慎起见,他只勾选了自己改动的10个文件进行提交(假设这10个文件跟上面的100个文件没有重合)。

结果:
这次提交导致了远端原来100个文件的提交都丢失,而且在文件的commit记录中不会体现出来,很坑。

相关分析文章:
git merge使用不当引发的代码丢失血案
原作者: git merge使用不当引发的代码丢失血案

vsftpd 启动失败处理笔记

新申请的一台Centos机器,yum install vsftpd后,执行 systemctl start vsftpd 失败。
相关报错信息定位:
journalctl -xe

输出:
Unregistered Authentication Agent for unix-process

用关键字“unregistered authentication vsftp”百度搜索
这篇帖子找到解决方案

1.出现错误的原因是:由于centos7中vsftp的配置文件默认将 listen_ipv6=YES 这一行没有注释掉,而我们目前的网络环境还不支持ipv6,从而导致出现错误无法启动,所以解决方法是将 listen_ipv6=YES更改为:listen_ipv6=NO,或将这一行注释掉

vi /etc/vsftpd/vsftpd.conf, 注释掉listen_ipv6=YES 这一行

再次尝试重启vsftpd, 提示:
500 OOPS: can only support ipv4 and ipv6 currently
vi vsftpd.conf, 修改: listen=YES