【问题标题】:Git grep across all new and modified files (before commit)跨所有新文件和修改文件的 Git grep(提交前)
【发布时间】:2019-03-08 02:38:29
【问题描述】:

我可以在我的 Windows Git Bash 中运行什么命令,它将向我显示文件名、行预览(上下文)和我的代码中写有“TODO”的所有地方的行号,仅限于 新的文件和修改的文件?

方法1不足(来自here

这很笨重并且不打印行号:

function __greptodo {
    QUERY="TODO"
    for FILE in `git diff --name-only`; do
        grep "$QUERY" $FILE 2>&1 >/dev/null
        if [ $? -eq 0 ]; then
            echo '———————————————'
            echo $FILE 'contains' $QUERY
            grep "$QUERY" $FILE 2>&1
        fi
    done
}
alias greptodo=__greptodo

方法2不足(来自here

这要好得多(显示上下文并包括新文件和修改后的文件),但仍然不打印行号:

grep -s "TODO" $(git ls-files -m)

【问题讨论】:

    标签: git grep diff


    【解决方案1】:

    -n 标志告诉grep 显示行号,所以你很接近。试试:

    grep -sn "TODO" $(git ls-files -m)
    

    要包含未跟踪的文件,请使用 --others (-o) 标志和 --exclude-standard 标志来排除 Git 通常忽略的文件:

    grep -sn "TODO" $(git ls-files -mo --exclude-standard)
    

    【讨论】:

    • 谢谢。这越来越近了。但是,这似乎适用于“要提交的更改”或“未准备提交的更改”但不适用于“未跟踪的文件”的文件。如果我第一次运行git add *,那么你的命令就会挂起。
    • 明白了。我错过了您也需要新文件。请参阅上面的编辑,但您需要 git ls-files--others--exclude-standard 标志。
    • 谢谢!我看到添加-i 使其不区分大小写:stackoverflow.com/a/48492465/470749
    • 我刚刚注意到一个奇怪的、罕见的情况,它不起作用:我弹出了一个存储,它在一个文件中存在冲突,然后我解决了冲突(在 Netbeans 中并将其标记为已解决),然后当我运行它时,我的 TODO 都没有出现。于是我再次保存了一个存储,这次我没有弹出它,而是使用了apply。然后这段代码可以找到我的 TODO。
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2020-07-03
    相关资源
    最近更新 更多