我尝试在git中使用以下语句:
$ wc -l file name
上述声明仅提供最新版本。但我需要每次提交,所以我怎么能得到它呢?
答案 0 :(得分:1)
您发布的命令与git
没有任何共同之处。 wc
是一个通用的Unix工具,用于计算文件中的字节,字符,单词或行(其名称代表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
它接受文件路径作为其第一个参数并生成一个行列表;每行包含提交哈希值和输入文件在提交后具有的行数。
答案 1 :(得分:0)
您可以使用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