当我拥有 .gitignoredata/*
并运行git clean -fd
时,数据文件夹及其所有内容文件都将被删除。
我想要的是删除 git repo 中所有未修订的文件,同时排除所有被忽略的文件(即不要删除 gitignored 文件)。我能做什么?
除非指定了标志,否则 Git 通常不会清除被忽略的文件-x
,但奇怪的是,它会在像您那样配置时清除(folder/*
)。
正如@VonC 指出的那样,您应该更改您的.gitignore
-file 以忽略目录(data/
)而不是其内容(data/*
)。
这是一个微妙的区别,但对 git 很重要。
我发现了更多细节。在/tmp/*
gitignore 中,git clean -fd
将删除它。正如在其他答案中所说,这不会发生/tmp/
在 gitignore 中。
但是一旦你签入了这个目录中的任何文件,git clean -fd
就会忽略这个路径。这可以通过git add -f
或添加!/tmp/.keep
到 gitignore 并签入该文件来实现。
更改data/*
为data/
对我来说不可用,因为之后您无法将排除文件夹中的文件/文件夹列入白名单。
当你把它放在 .gitignore
data/
!data/foo.txt
该文件foo.txt
将不包括在内。
要删除所有未跟踪的文件(和文件夹),因为它们显示在git status
(并保留类似data/*
gitignore 的内容),您可以使用
git ls-files -z -o --exclude-standard | xargs -0 rm -rf
这将列出所有未跟踪的文件并将它们传递给rm -rf
函数,函数将删除它们。