Git 日志显示按类型排序的用户修改文件
Git log to show a user's modified files sorted by type
对于工作中的一些报告,我必须发送我本月修改的文件,按类型分组。我一直在研究 git log
命令来显示文件名和状态,但如果我也可以让它按文件扩展名排序,它会对我有帮助。
从 this answer 开始工作,我达到了:
git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | sort -u
现在我对如何按文件名对列表进行排序感到困惑。
这是当前的输出,但通常有几十个文件:
M package.json
M src/app/spa/components/component1/comp1-tpl.html
M src/app/spa/components/component1/comp1-component.ts
M src/app/spa/components/component1/comp1-services.ts
M src/app/spa/components/component1/comp1-services.spec.ts
A src/app/spa/components/component2/comp2-tpl.html
我有个主意。在命令后面添加"grep .ext"。对于结果重定向文件中的输出。然后对其他分机做同样的事情。最后,您将获得扩展程序排序的全部文件。你明白我的想法吗?
对于您的示例 report.txt 包含一个有序列表。
-> git log --no-merges --author="me" --after={2019-03-31} --name-status --漂亮=格式:“” |排序-u | grep "\.html" >> report.txt
-> git log --no-merges --author="me" --after={2019-03-31} --name-status --漂亮=格式:“” |排序-u | grep "\.json" >> report.txt
-> git log --no-merges --author="me" --after={2019-03-31} --name-status --漂亮=格式:“” |排序-u | grep "\.ts" >> report.txt
您可以像这样在排序前添加扩展名:
> git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | sed -r 's|.*(\.[^.]+)$|\t&|;' | sort -u
.html A src/app/spa/components/component2/comp2-tpl.html
.html M src/app/spa/components/component1/comp1-tpl.html
.json M package.json
.ts M src/app/spa/components/component1/comp1-component.ts
.ts M src/app/spa/components/component1/comp1-services.spec.ts
.ts M src/app/spa/components/component1/comp1-services.ts
By "filename",如果你指的是路径:
git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | sort -k2
如果您指的是没有任何父目录的名称:
git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | while read type path;do echo "$(basename $path) $type $path";done | sort -u | cut -f2- -d' '
对于工作中的一些报告,我必须发送我本月修改的文件,按类型分组。我一直在研究 git log
命令来显示文件名和状态,但如果我也可以让它按文件扩展名排序,它会对我有帮助。
从 this answer 开始工作,我达到了:
git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | sort -u
现在我对如何按文件名对列表进行排序感到困惑。
这是当前的输出,但通常有几十个文件:
M package.json
M src/app/spa/components/component1/comp1-tpl.html
M src/app/spa/components/component1/comp1-component.ts
M src/app/spa/components/component1/comp1-services.ts
M src/app/spa/components/component1/comp1-services.spec.ts
A src/app/spa/components/component2/comp2-tpl.html
我有个主意。在命令后面添加"grep .ext"。对于结果重定向文件中的输出。然后对其他分机做同样的事情。最后,您将获得扩展程序排序的全部文件。你明白我的想法吗? 对于您的示例 report.txt 包含一个有序列表。
-> git log --no-merges --author="me" --after={2019-03-31} --name-status --漂亮=格式:“” |排序-u | grep "\.html" >> report.txt
-> git log --no-merges --author="me" --after={2019-03-31} --name-status --漂亮=格式:“” |排序-u | grep "\.json" >> report.txt
-> git log --no-merges --author="me" --after={2019-03-31} --name-status --漂亮=格式:“” |排序-u | grep "\.ts" >> report.txt
您可以像这样在排序前添加扩展名:
> git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | sed -r 's|.*(\.[^.]+)$|\t&|;' | sort -u
.html A src/app/spa/components/component2/comp2-tpl.html
.html M src/app/spa/components/component1/comp1-tpl.html
.json M package.json
.ts M src/app/spa/components/component1/comp1-component.ts
.ts M src/app/spa/components/component1/comp1-services.spec.ts
.ts M src/app/spa/components/component1/comp1-services.ts
By "filename",如果你指的是路径:
git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | sort -k2
如果您指的是没有任何父目录的名称:
git log --no-merges --author="me" --after={2019-03-31} --name-status --pretty=format:"" | while read type path;do echo "$(basename $path) $type $path";done | sort -u | cut -f2- -d' '