41

当我拥有 .gitignoredata/*并运行git clean -fd时,数据文件夹及其所有内容文件都将被删除。

我想要的是删除 git repo 中所有未修订的文件,同时排除所有被忽略的文件(即不要删除 gitignored 文件)。我能做什么?

4

3 回答 3

47

除非指定了标志,否则 Git 通常不会清除被忽略的文件-x,但奇怪的是,它会在像您那样配置时清除(folder/*)。

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

这是一个微妙的区别,但对 git 很重要。

于 2013-10-18T06:13:48.377 回答
1

我发现了更多细节。在/tmp/*gitignore 中,git clean -fd将删除它。正如在其他答案中所说,这不会发生/tmp/在 gitignore 中。

但是一旦你签入了这个目录中的任何文件,git clean -fd就会忽略这个路径。这可以通过git add -f或添加!/tmp/.keep到 gitignore 并签入该文件来实现。

于 2018-08-17T07:05:48.823 回答
0

更改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函数,函数将删除它们。

归功于https://stackoverflow.com/a/3801554/4710968

于 2019-08-19T10:15:56.577 回答