如果我有.gitignore data/*
并运行git clean -fd
,则会删除数据文件夹及其所有内容文件。
我想要的是删除git仓库中的所有未经检查的文件,同时排除所有被忽略的文件(即不要删除gitignored文件)。我该怎么办?
答案 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
函数,该函数将删除它们。