Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列出所有未被.gitignore忽略的文件_Git_List_File - Fatal编程技术网

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

列出所有未被.gitignore忽略的文件,git,list,file,Git,List,File,我想列出所有未被.gitignore忽略的文件,即我的存储库的所有源文件 默认情况下,ag做得很好,但我不知道有哪种方法可以在不安装其他软件的情况下工作 git-ls-files不带选项几乎可以正常工作,但不考虑已修改/创建的文件,例如,如果我创建一个新的文件栏而不提交它,git-ls-files不会显示该文件 git status --short| grep '^?' | cut -d\ -f2- 将为您提供未跟踪的文件 如果将其与git ls文件合并,则会得到所有未忽略的文件: (

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

默认情况下,
ag
做得很好,但我不知道有哪种方法可以在不安装其他软件的情况下工作

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

git status --short| grep  '^?' | cut -d\  -f2- 
将为您提供未跟踪的文件

如果将其与
git ls文件
合并,则会得到所有未忽略的文件:

( git status --short| grep '^?' | cut -d\  -f2- && git ls-files ) | sort -u
然后,您可以通过

( xargs -d '\n' -- stat -c%n 2>/dev/null  ||: )

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

还有另一种方法,使用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,当路径被忽略时,它返回exit 0。因此,这里是完整的命令

for f in $(find . -type f -a -not -path './.git/*'); do
    if ! $(git check-ignore -q $f); then echo $f; fi
done

什么是
| |::
部分??
:==true
;忽略
stat
的非零退出状态,这是预期的,除非stdin上的所有文件确实存在于磁盘上(
2>/dev/null和| |:
可能会隐藏
stat
中的其他故障,例如EPERM、ENOMEM或EIO故障,但除非您的回购和系统处于非常奇怪的状态,否则您不应该获得这些故障中的任何一个,在这种情况下,您将从其他实用程序中获得大量错误)p、 如果添加了一个新目录和它下面的一些文件,
git status--short
似乎会给出目录名,而不是目录+文件名。很好!请注意,如果有被忽略的大目录,例如
node\u modules
,这会非常慢。您必须不断添加大目录,这会有点失败这是尝试自动尊重
.gitignore
文件的目的。但是只添加
-not-path./node\u modules/*.
就足够了。