git:如何忽略所有目前未跟踪的文件?

有没有一种方便的方法来忽略所有未跟踪的文件和文件夹在git仓库?
(我知道.gitignore 。)

所以git status会再次提供一个干净的结果。

正如已经说过的,排除地位只是使用:

 git status -uno # must be "-uno" , not "-u no" 

如果您想永久忽略当前未跟踪的文件,则可以从项目的根目录启动:

 git status --porcelain | grep '^??' | cut -c4- >> .gitignore 

随后每次调用git status都会明确地忽略这些文件。

更新 :上面的命令有一个小缺点:如果你没有.gitignore文件,但你的gitignore会忽略自己! 发生这种情况是因为文件.gitignoregit status --porcelain执行之前被创build。 所以,如果你没有.gitignore文件,我推荐使用:

 echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore 

这会创build一个创build.gitignore文件之前完成的子shell。

命令说明,因为我得到很多票(谢谢!)我想我最好解释一下命令:

  • git status --porcelain用来代替git status --short因为手动状态是“为脚本提供一个易于parsing的格式的输出,这与短输出类似,但是在git版本中保持稳定,不pipe用户configuration“。 所以我们既有可parsing性又有稳定性;
  • grep '^??' 只筛选以??开头的行 ,根据git状态手册 ,它对应于未跟踪的文件;
  • cut -c4-删除每一行的前三个字符,这就给了我们相对于未跟踪文件的path;
  • | 符号是pipe道 ,它将前一个命令的输出传递给下一个命令的input;
  • >>>符号是redirect操作符 ,它们将前一个命令的输出追加到一个文件中,或者分别覆盖/创build一个新文件。

对于那些喜欢使用sed而不是grepcut ,另一种方法是:

 git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore 

如果你想永久忽略这些文件,一个简单的方法将它们添加到.gitignore

 git ls-files --others --exclude-standard >> .gitignore 

在手册中find它

git status -uno

-u no也不显示unstaged文件。 -uno按要求工作,显示未分离,但隐藏未跟踪。

两种方式:

将参数“-uno”用于git-status。 这是一个例子:

 [jenny@jenny_vmware:ft]$ git status # On branch ft # Untracked files: # (use "git add <file>..." to include in what will be committed) # # foo nothing added to commit but untracked files present (use "git add" to track) [jenny@jenny_vmware:ft]$ git status -uno # On branch ft nothing to commit (working directory clean) 

或者你可以添加文件和directires到.gitignore,在这种情况下,他们将永远不会出现。

如果你有很多未跟踪的文件,并且不想“ gitignore ”所有这些,请注意,自git 1.8.3(2013年4月22日)以来, git status会提及--untracked-files=no如果你没有添加该选项的第一个地方!

git status ”build议用户在需要太长时间的时候使用--untracked=no选项。