列出所有未被 .gitignore 忽略的文件

问题描述 投票:0回答:6

我想列出 .gitignore 未忽略的所有文件,即我的存储库的所有源文件。

ag
默认情况下效果很好,但我不知道有一种方法可以在不安装额外软件的情况下工作。

不带选项的

git ls-files
几乎可以正常工作,但没有考虑已修改/创建的文件,例如,如果我创建一个新文件栏而不提交它,
git ls-files
不会显示该文件。

git list file
6个回答
21
投票
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  ||: )

仅获取可统计的文件(==在磁盘上)。


5
投票

这是另一种方法,使用

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

4
投票

git ls-files --cached --others --exclude-standard
将为您提供您想要的信息。

  • --cached
    -- 显示 git 知道的文件。 (没有选项的普通
    git ls-files
    相当于通过此选项。)
  • --others
    -- 显示 git 知道的文件。默认情况下,这包括忽略的文件,但是...
  • --exclude-standard
    -- 不要在输出中包含忽略的文件。

2
投票

您可以使用fd

运行命令是:

fd -H

请注意,如果没有

.git
目录,只有
.gitignore
文件(例如裸存储库),则必须明确说明 .gitignore 文件在哪里。

fd -H --ignore-file .gitignore

欲了解更多详情,请查看这里


0
投票

Uri 的答案的较短变体

    查找被忽略的文件:
find . -not -path ./.git/\* -type f -exec git check-ignore -q {} \; -print

    查找非忽略的文件:
find . -not -path ./.git/\* -type f -not -exec git check-ignore -q {} \; -print
    

0
投票

-t

选项显示表示文件状态的“标签”,“R”表示文件已被删除。
如果我们排除带有“R”和非“R”行的文件,我们就会得到我们想要的。

git ls-files -dcmot | sed "s/^[HSMCK?U]/X/" | uniq | sed "s/^R/X/" | uniq -u | sed "s/^X //"
    
© www.soinside.com 2019 - 2024. All rights reserved.