如前所述,要将状态排除在外,只需使用:
git status -uno # must be "-uno" , not "-u no"
如果您想永久忽略当前未跟踪的文件,则可以从项目的根目录启动:
git status --porcelain | grep '^??' | cut -c4- >> .gitignore
以后每次调用git status
都会显式忽略那些文件。
UPDATE:上面的命令有一个小缺点:如果您没有.gitignore
文件,则您的gitignore将忽略自身!发生这种情况是因为在执行文件.gitignore
之前创建了文件git status --porcelain
。因此,如果您还没有.gitignore
文件,我建议使用:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
这将创建完成一个子shell 之前的.gitignore
创建文件。
命令解释,因为我得到了很多票(谢谢!),我想我最好对命令进行一些解释:
git status --porcelain
使用而不是git status --short
因为手动说明“将输出以易于解析的格式提供给脚本。这与简短输出类似,但是在git版本和任何用户配置下都将保持稳定。” 因此,我们既具有可解析性又具有稳定性。
grep '^??'
仅过滤以开头的行??
(根据git status手册,该行对应于未跟踪的文件);
cut -c4-
删除每行的前3个字符,这只给我们未跟踪文件的相对路径;
- 这些
|
符号是管道,它们将前一个命令的输出传递到后一个命令的输入。
- 的
>>
和>
符号是重定向运营商分别,其前一个命令的输出附加到文件或重写/创建一个新的文件,。
另一种变体为那些喜欢谁使用sed
,而不是grep
和cut
,还有一种方法:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore