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会忽略自己! 发生这种情况是因为文件.gitignore
在git 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
而不是grep
和cut
,另一种方法是:
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
选项。