git:在第一次提交时列出所有拥有所有者/身份的文件(或者更确切地说,是第一个提交文件的用户)

时间:2011-09-27 22:03:20

标签: git

如何使用git在首次提交时列出特定目录中的所有文件以及这些文件的所有者/身份?

通常很难在许多文件中获取这样的信息片段吗?

编辑:好的,git没有提供直接的方法来执行此操作,但它确实存储了谁提交各种文件,对吧?我需要在特定目录中使用此列表,以便了解我负责的文件。

5 个答案:

答案 0 :(得分:10)

尝试一下:

$ cd thatdirectory
$ git ls-files |
  while read fname; do
    echo "`git log --reverse --format="%cn" $fname|head -1` first added $fname"
  done

在重命名的情况下,“首次添加”可能会产生误导。

答案 1 :(得分:4)

一种非常直接的方法是

git rev-list --objects --all |
    cut -d' ' -f2- |
    sort -u |
    while read name; do 
         git --work-tree=. log --reverse -1 --format="%cn%x09$name" -- "$name"
    done

注意事项:

  • 这显示了对象数据库中存在的每个路径的第一个提交者名称(%cn)(不仅仅是(任何)当前版本)
  • --all标志表示您想要所有分支上的所有对象。要限制范围,请使用分支/标记的名称或仅HEAD

  • 替换它
  • n 2 表现(对于非常大的回购品而言不能很好地扩展)

  • 如果路径名包含格式化序列(例如%H等)
  • ,则输出不正确

它将以空名称开始,这是根树对象。

答案 2 :(得分:4)

我碰巧遇到了类似的情况。接受的答案是有效的,但为什么你们不使用find工作副本?

find . -type f -exec git log --reverse --format="{} %cn" -1 {} \;

答案 3 :(得分:1)

使用git本身,这是不可能的。 Git没有跟踪文件的所有者。

答案 4 :(得分:0)

要有效地做到这一点,

git log --raw --date-order --reverse --diff-filter=A --format=%H%x09%an \
| awk -F$'\t' '
       /^[^:]/   {thisauthor=$2}
       $1~/A$/   {print thisauthor "\t" $2}
'

可能有一个|sort -t$'\t' -k1,1或其他东西使它更漂亮