Git日志,从另一个命令输入

时间:2018-03-18 15:12:56

标签: bash git scripting

我有一项任务来计算来自git开源项目的所有文件的所有更改。我知道如果我使用:

git log --pretty=oneline <filename> | wc  -l

我将获得该文件的更改次数(我在Windows 10上使用git bash)

我的想法是使用

find .

并将输出重定向到git命令。如何进行重定向?我试过了:

$ find . > git log --pretty=online | wc -l
0
find: unknown predicate `--pretty=online'

$ find . | git log --pretty=online | wc -l
fatal: invalid --pretty format: online
0

2 个答案:

答案 0 :(得分:2)

你可以做得更好

git log --pretty='' --name-only | sort | uniq -c

这是“仅显示每次提交中更改的文件的名称,没有其他元数据,对列表进行排序,因此uniq可以轻松计算每个提交的出现次数”

答案 1 :(得分:0)

您需要循环遍历find的结果。

find -type f | grep -v '^\./\.git' |
while read f; do
    count=$(git log --oneline ${f} | wc -l)
    echo "${f} - ${count}"
done | grep -v ' 0$'

您的find没问题,但我将其限制为只有文件(git无法明确跟踪目录)并删除.git文件夹(我们不知道& #39; t关心那些文件)。将其导入循环(我使用while),然后您的git log命令工作正常。最后,我要删除任何数量为0的内容,因为我可能有.gitignore的一部分文件,我不想显示(例如,{{1}中的内容})。