我想列出.gitignore未忽略的所有文件,例如我的存储库的所有源文件。
ag
默认情况下做得很好,但我不知道一种方法可以在不安装其他软件的情况下运行。
git ls-files
工作得很好,但没有考虑已经修改/创建的文件,例如,如果我创建一个新的文件栏而没有提交它,git ls-files
没有显示该文件。
答案 0 :(得分:8)
git status --short| grep '^?' | cut -d\ -f2-
会为您提供未跟踪的文件。
如果您将其与git ls-files
结合使用,则您已获得所有未标记的文件:
( git status --short| grep '^?' | cut -d\ -f2- && git ls-files ) | sort -u
然后您可以按
过滤( xargs -d '\n' -- stat -c%n 2>/dev/null ||: )
仅获取可统计的文件(==在磁盘上)。
答案 1 :(得分:2)
这是另一种方法,使用git check-ignore
可能会更干净:
find . -type f
将为您提供当前文件夹中的所有文件。
find . -type f -not -path './.git/*'
将为您提供所有文件,但.git文件夹中的所有文件除外,您绝对不希望包含这些文件。然后,
for f in $(find . -type f -not -path './.git/*'); do echo $f; done
与以上相同。只是准备下一步,介绍条件。这个想法是使用git check-ignore -q
,当路径被忽略时它返回出口0。因此,这是完整的命令
for f in $(find . -type f -a -not -path './.git/*'); do
if ! $(git check-ignore -q $f); then echo $f; fi
done