[英]How can i get the line of code per commit for a file in git
我尝试在 git 中使用以下语句:
$ wc -l file name
以上声明只给了我最新版本。 但是我需要每次提交,那么我怎么才能得到它呢?
您发布的命令与git
没有任何共同之处。 wc
是一个通用的 Unix 工具,用于计算文件中的字节、字符、单词或行word count
(它的名字代表word count
)。 它不能用于计算代码行数,它是否与语言无关并且无法从注释中分辨出一行代码。
但是,如果您需要文件中的总行数,则可以使用以下命令:
git log --numstat --format=oneline -- file.txt | grep file.txt$
获取指定文件的更改历史记录。
输出包含由可变数量的空格分隔的三列。 第一列包含每次提交添加的行数,第二列包含该提交删除的行数,第三列始终是项目内文件的路径。
像往常一样,提交以相反的顺序显示; 第一行是最近修改文件的提交,最后一行是文件创建时的提交(第二列应该包含0
)。
编写一个简单的脚本(使用您首选的脚本语言)来解析输出并在每次提交时生成文件的行数很容易。
更新
上面的命令行不保留提交哈希。 仅运行其中的git log
部分会为每次提交生成两行。 第一行包含提交哈希和提交消息的第一行,用空格分隔。 第二行是上面解释的那一行。 对于一个小的解析脚本来说仍然是一件容易的事。
在bash
,解析脚本可能如下所示:
#!/bin/bash
if [ ! -f $1 ]; then echo Cannot find the file \"$1\".; exit 1; fi
LINES=$(wc -l $1 | sed 's/^ *\([0-9]*\) .*$/\1/')
git log --numstat --format=oneline -- $1 | while read -r HASH COMMENT; do
read -r INSERTED DELETED FILENAME
echo $HASH $LINES
LINES=$(($LINES-$INSERTED+$DELETED))
done
它接受文件路径作为它的第一个参数并生成一个行列表; 每行包含提交哈希和输入文件在提交后的行数。
您可以使用git log
获取给定$filename
所有提交哈希,并在您的 shell 中使用for
循环检查这些。 例如(在 Zsh 中):
git stash
for sha in $(git log --format=format:%H -- $filename); do
git checkout $sha -- $filename
echo "$(wc -l $filename) @ $sha"
done
git stash pop
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.