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

169

有没有一种方便的方法可以忽略Git存储库中所有未跟踪的文件和文件夹?
(我知道 .gitignore 的存在。)

这样,git status 命令就会再次提供干净的结果。


可能是重复的问题:有没有办法让Git不显示未跟踪的文件? - random
或者你可以在你的.gitignore文件中添加一个星号*。 :) - vilicvane
2
仅使用 * 很可能不是您想要的。 - sjas
对于这么多错误的答案感到惊讶。-u no 是错误的。-uno 是正确的。-u no 尝试对名为 no 的文件执行状态操作!no 不是 -u 的参数。要强制将 no 解释为 -u 的参数,就不能有空格。要测试这一点,请执行 touch Invalid 并比较 git status -uInvalidgit status -u Invalid - Aaron McDaid
由于 -unono 应该是 -u 的参数,因此认为 Git 的选项解析存在问题是合理的。从历史上看,通常带有参数的选项允许它们之间有空格。 - Mr. Lance E Sloan
12个回答

0

我来这里是为了解决一个稍微不同的问题。也许对其他人有用:

我创建了一个新分支feature-a。在这个分支中,我创建了新目录,并需要修改.gitignore文件以抑制其中一些目录。当向项目添加创建各种缓存文件的新工具时,这种情况经常发生。.serverless.terraform等。

在我准备将其合并回主分支之前,我遇到了其他问题,因此我再次检出master,但现在git status再次捕获了那些被抑制的文件夹,因为.gitignore尚未合并。

这里的答案实际上很简单,尽管我不得不找到this blog才能弄清楚:

只需从feature-a分支检出.gitignore文件即可。

git checkout feature-a -- feature-a/.gitignore
git add .
git commit -m "update .gitignore from feature-a branch"

0
补充@Diego上面的答案,我认为提到的解决方案对于文件名中带有空格(以及可能是其他特殊字符,比如“本身,尽管我没有检查)的文件将失败。这一行:
echo "$(git status --porcelain | grep '^??' | cut -c4- | sed 's/^\"//;s/\"$//')" >> .gitignore

如果存在,删除开头和结尾的双引号,从而修复它。

虽然我不太擅长使用sed,但可能有更好的方法来解决这个问题或边缘情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接