如何在git

时间:2016-03-29 09:30:32

标签: git

我尝试在git中使用以下语句:

$ wc -l file name 

上述声明仅提供最新版本。但我需要每次提交,所以我怎么能得到它呢?

2 个答案:

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