所以我有点问题。我为一家小型创业公司(大约8名开发人员)工作,我的老板最近决定我们需要将每个文件的所有者放在文档中。所以我一直尝试使用svn blame和文件来编写一些东西来循环遍历每个php文件,看看哪些文件的用户名超过了15行,但我还是没能把它弄好。
我真正想要的是一个单行(或简单的bash脚本),它将列出subversion存储库中的每个文件以及最后编辑大多数行的用户名。有任何想法吗?
答案 0 :(得分:2)
好吧,这就是我想出来的:
#!/bin/bash
set -e
for file in `svn ls -R`; do
if [ -f $file ]; then
owner=`svn blame $file | tr -s " " " " | cut -d" " -f3 | sort | uniq -c | sort -nr | head -1 | tr -s " " " " | cut -d" " -f3`
if [ $owner ]; then
echo $file $owner
fi
fi
done
它使用svn ls
来确定存储库中的每个文件,然后对于每个文件,检查svn blame
输出:
tr -s " " " "
将多个空格挤入一个空间cut -d" " -f3
获取第三个以空格分隔的字段,即用户名sort
对输出进行排序,以便一个用户最后编辑的所有行都在一起uniq -c
获取所有唯一的行并输出每行出现的次数sort -nr
以相反顺序对数字进行排序(以便首先排序最常出现的用户名)head -1
返回第一行tr -s " " " " | cut -d" " -f3
与之前相同,挤压空格并返回第三个用户名字段。运行需要一段时间,但最后您会得到一份<filename> <most prevalent author>
<强>注意事项:强>
答案 1 :(得分:2)
for f in $(find . -name .svn -prune -o -type f); do
echo $f $(svn blame $f | awk '{ print $2 }' | sort | uniq -c | sort -nr | head -n 1 | cut -f 1)
done