列出我在subversion中拥有的文件

时间:2010-06-29 18:23:13

标签: linux svn bash

所以我有点问题。我为一家小型创业公司(大约8名开发人员)工作,我的老板最近决定我们需要将每个文件的所有者放在文档中。所以我一直尝试使用svn blame和文件来编写一些东西来循环遍历每个php文件,看看哪些文件的用户名超过了15行,但我还是没能把它弄好。

我真正想要的是一个单行(或简单的bash脚本),它将列出subversion存储库中的每个文件以及最后编辑大多数行的用户名。有任何想法吗?

2 个答案:

答案 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>

列表

<强>注意事项:

  • 未执行错误检查以确保从SVN工作副本中调用脚本
  • 如果从WC的根目录深处调用,则只会考虑该级别和更深层次的文件
  • 正如评论中所提到的,您可能需要考虑修订日期(如果大多数签到发生在10年前,您可能想要打折确定所有者)
  • 未签入的任何工作副本更改将不会生效

答案 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