如何将所有当前未跟踪的文件/文件夹添加到Git忽略列表中?

34

我初始化了git存储库并进行了第一次提交。现在,在该目录中,我运行./configure./make all,以便填充许多不想跟踪的额外文件/文件夹。

我想做的是将所有这些未跟踪的文件全部添加到我的gitignore中。有没有简单的方法来实现这一点?

我可以通过在.gitignore中指定适当的行来摆脱一些不必要的文件,例如*.o*.mod,但这并不能解决问题。


1
可能是重复的问题:git:如何忽略所有当前未跟踪的文件? - RedX
5个回答

51

试试这个:

git status -s | grep -e "^\?\?" | cut -c 4- >> .gitignore

解释: git status -s 可以给你展示一个简短的不包含标题的状态。 grep 只选取以?? 开头的行,即未被跟踪的文件;cut 去除了??,其余部分添加到了.gitignore 文件中。


8
这个命令也会忽略你的.gitignore文件。如果你想追踪这个文件,可以使用命令 git status -s | grep -e "^\?\?" | grep -v ".gitignore" | cut -c 4- >> .gitignore - chiborg
1
请提供Windows解决方案! - calbertts
2
在cmd中,findstr /C:"text"基本上相当于grep "text" - Eagle
1
这个命令还会列出我修改过的文件。 - CodyChan
非常好的解决方案,直接在Windows上使用cgwin,一切都很顺利,谢谢! - boardtc

12

一个更简单的命令是

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

您可能希望编辑结果,以通配符替换重复的模式。


我对这个答案不太确定,因为它添加了文件名的完整路径。对我来说,被接受的答案更好,因为它只添加了第一层深度,即dir1/而不是dir1/dir2/dirn/file1、dir1/file等。 - Francois

1
如果您的工作目录除了未跟踪的文件/文件夹外是干净的,可以使用awk来实现更短的解决方案:
git status -s | awk '{print $2}' >> .gitignore

0

当未跟踪的内容中有空格时,这也适用,并且更短:

git status -s | grep -oP '^\?\? "?\K[^"]+' >>.gitignore 

0
在被接受的答案中,grep部分给我带来了问题(即没有过滤,而是显示了所有包括以M(修改)开头的行),将"^\?\?"替换为"^??"解决了我的问题。我使用的是win 10,并在msys2的bash中使用它。

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