如何在git clean -fd中保留所有被忽略的文件?

时间:2013-10-18 05:59:50

标签: git git-clean

如果我有.gitignore data/*并运行git clean -fd,则会删除数据文件夹及其所有内容文件。

我想要的是删除git仓库中的所有未经检查的文件,同时排除所有被忽略的文件(即不要删除gitignored文件)。我该怎么办?

3 个答案:

答案 0 :(得分:44)

Git通常不会清除被忽略的文件,除非指定了-x标志,但奇怪的是,当你按照folder/*)进行配置时它会被清除。

正如@VonC指出的那样,您应该更改.gitignore - 文件以忽略目录(data/)而不是其内容(data/*)。

这是一个微妙的差异,但它对git很重要。

答案 1 :(得分:0)

我发现了更多详细信息。将/tmp/*放在gitignore中,将其删除。正如其他答案中所述,gitignore中的git clean -fd不会发生这种情况。

但是,一旦您签入了此目录中的任何文件,/tmp/将忽略此路径。这可以通过git clean -fd或将git add -f添加到gitignore并检入此文件来实现。

答案 2 :(得分:0)

data/*更改为data/对我来说不可用,因为在那之后您不能将排除文件夹中的文件/文件夹列入白名单。

将其放在.gitignore中

data/
!data/foo.txt

文件foo.txt将不包括在内。

要删除git status中显示的所有未跟踪文件(和文件夹)(并在gitignore中保留data/*之类的内容),可以使用

git ls-files -z -o --exclude-standard | xargs -0 rm -rf

这将列出所有未跟踪的文件,并将它们传递给rm -rf函数,该函数将删除它们。

贷记https://stackoverflow.com/a/3801554/4710968