代码之家  ›  专栏  ›  技术社区  ›  steve

在提交之前如何更好地浏览阶段性文件?

  •  11
  • steve  · 技术社区  · 14 年前

    所以在跑步之前 git commit 我经常会运行以下程序:

    git grep --cached -l -I "debugger"
    

    我认为它类似于:

    git diff --cached
    

    (这将显示您将要提交的所有更改,即显示阶段文件中的差异)。

    不幸的是,我发现 --cached 选择 git grep 只需告诉Git“只”查看其索引中的所有内容。

    那我怎么跑呢 吉特grep 只有通过我的阶段性文件?

    (是的,我知道我可以 git diff --cached 搜索,但我宁愿有编程能力,通过我的阶段性文件grep。)

    3 回复  |  直到 5 年前
        1
  •  1
  •   Markus    5 年前

    如果您有一个类似Unix的shell可用,那么答案非常简单:

    git grep --cached "debugger" $(git diff --cached --name-only)
    

    这个会运行 git grep 在阶段文件列表中。

        2
  •  11
  •   Ben Jackson    14 年前

    很多提交前钩子使用 git diff-index --cached -S<pat> REV 查找添加或删除特定模式的更改。所以在你的情况下, git diff-index --cached -Sdebugger HEAD . 您可能想添加 -u 为了得到一个diff,否则它只标识有问题的文件。

        3
  •  0
  •   Ryan Carney    7 年前

    首先,您需要从索引中获取文件列表(不包括已删除的文件)。 这可以通过以下方式实现:

    git diff --cached --name-only --diff-filter=d HEAD
    

    其次,您需要使用:前缀来访问 当前索引(已暂存但尚未提交)请参阅 gitrevisions manual 更多信息。

    git show :<file>
    

    最后,这里是一个将所有文件放在一起的示例,以使这个文件列表变灰。

    # Get a list of files in the index excluding deleted files
    file_list=$(git diff --cached --name-only --diff-filter=d HEAD)
    
    # for each file we found grep it's contents for 'some pattern'
    for file in ${file_list}; do
        git show :"${file}" | grep 'some pattern'
    done
    

    阿尔索 here's an example 使用此方法检查要提交的文件中的版权年是否是最新的。