gpt4 book ai didi

git - 使用 git log 时如何排除目录?

转载 作者:太空狗 更新时间:2023-10-29 14:22:54 29 4
gpt4 key购买 nike

瞄准

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

代码

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 -- 。 “:(排除)[路径]”
  • 我知道当我不尝试排除目录时此代码有效。
  • 我也知道“查找”在单独运行时可以正常工作。

问题

有人可以帮助我理解我做错了什么或提供一种排除多个目录的更好方法吗?

如有任何帮助,我们将不胜感激。

最佳答案

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com