我有一项任务来计算来自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
答案 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}中的内容})。