瞄准
我想知道一段时间内特定存储库中更改的行数,并将其打印到一个简单的文本文件中。但是,当我运行下面的代码时,我收到一个错误,我不知道如何解决。
守则

git log --stat --since="2015-01-01" --until="2015-11-16" `find . \( ! -path "*[PATH]*" -a ! -path "*[PATH2]*" \)` | awk -F',' "/files? changed/ {
    files += \$1
    insertions += \$2
    deletions += \$3
    destination = \"$DESTINATION\"}

END {
    print \"Files Changed: \" files > destination
    print \"Insertions: \" insertions > destination
    print \"Deletions: \" deletions > destination
    print \"Lines changed: \" insertions + deletions > destination}"

错误
fatal: ambiguous argument '[PATH]': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
awk: cmd. line:7: fatal: expression for `>' redirection has null string value

其他有用信息
使用的git版本是1.7.1。因此,我不能使用这个:--oneline--format=%s--。“:(排除)[路径]”
我知道当我不试图排除目录时,这段代码可以工作。
我也知道“find”在单独运行时是正确的。
问题
有谁能帮我理解我做错了什么,或者提供一个更好的方法排除多个目录?
任何帮助都将不胜感激。

最佳答案

git编写的错误消息告诉如何修复错误。问题是,有时git无法判断给出的第一个参数是路径还是修订。--可用于消除参数的歧义。
除此之外,您的代码中还有一些其他的小问题。shell还可以理解简单的引号,其中变量是不展开的。你绝对应该用简单的引号来编写awk脚本,因为它可以防止笨拙的转义序列来垃圾邮件你的代码。

git log --stat --since='2015-01-01' --until='2015-11-16' $(find . \( ! -path '*[PATH]*' -a ! -path '*[PATH2]*' \)) | awk -F',' '
/files? changed/ {
  files += $1
  insertions += $2
  deletions += $3
}

END {
  print "Files Changed: " files
  print "Insertions: " insertions
  print "Deletions: " deletions
  print "Lines changed: " insertions + deletions
}' > "${DESTINATION}"

此外,如果只将输出写入一个文件,那么让awk将其报告写入stdout并将其重定向到所需的文件会更容易,而不是在awk本身中执行输出重定向。

关于git - 使用git log时如何排除目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33756351/

10-14 17:48
查看更多