如何使用git在首次提交时列出特定目录中的所有文件以及这些文件的所有者/身份?
通常很难在许多文件中获取这样的信息片段吗?
编辑:好的,git没有提供直接的方法来执行此操作,但它确实存储了谁提交各种文件,对吧?我需要在特定目录中使用此列表,以便了解我负责的文件。
答案 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
注意事项:
--all标志表示您想要所有分支上的所有对象。要限制范围,请使用分支/标记的名称或仅HEAD
n 2 表现(对于非常大的回购品而言不能很好地扩展)
它将以空名称开始,这是根树对象。
答案 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
或其他东西使它更漂亮