Grep

查找不在 .gitignore 中的文件

  • December 27, 2021

我找到了在我的項目中顯示文件的命令:

find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
      -a -not -path './coverage*' -a -not -path './bower_components*' \
      -a -not -name '*~'

如何過濾文件使其不顯示 .gitignore 中的文件?

我以為我使用:

while read file; do
   grep $file .gitignore > /dev/null && echo $file;
done

但是 .gitignore 文件可以有 glob 模式(如果文件在 .gitignore 中,它也不適用於路徑),如何根據可能有 glob 的模式過濾文件?

git提供git-check-ignore檢查文件是否被.gitignore.

所以你可以使用:

find . -type f -not -path './node_modules*' \
      -a -not -path '*.git*'               \
      -a -not -path './coverage*'          \
      -a -not -path './bower_components*'  \
      -a -not -name '*~'                   \
      -exec sh -c '
        for f do
          git check-ignore -q "$f" ||
          printf '%s\n' "$f"
        done
      ' find-sh {} +

請注意,您會為此付出高昂的代價,因為檢查是針對每個文件執行的。

要顯示結帳中的文件並由 Git 跟踪,請使用

$ git ls-files

該命令有許多顯示選項,例如記憶體文件、未跟踪文件、修改文件、忽略文件等。請參閱git ls-files --help

引用自:https://unix.stackexchange.com/questions/358270