当我有 .gitignore data/*
并运行 git clean -fd
时,data 文件夹及其所有内容文件都将被删除。
我想要的是在不删除 gitignored 文件的情况下删除 git 存储库中所有未纳入版本控制的文件。我该怎么办?
默认情况下,Git 不会清理被忽略的文件,除非指定了 -x
标志,但奇怪的是,在您进行配置时(folder/*
),它会清理掉。
正如 @VonC 指出的那样,您应该更改 .gitignore
文件来忽略目录 (data/
) 而不是其内容 (data/*
)。
这是一个微妙的区别,但对 Git 很重要。
folder/
而不是 folder/*
,那么你就不能像 !folder/foo
这样做出例外。目前在 Github 的标准 gitignore for Visual Studio 中存在这样的问题:https://github.com/github/gitignore/commit/9aa3e1c3a7a5d9a7ecbab67f63eb81e8b4a493b7#commitcomment-6092133 - Jamie Humphries!folder/foo
这样的异常情况,那么这是否意味着你将跟踪foo
和folder
两个文件夹?这样一来,无论如何都会保留它们,不受git clean -fd
的影响。我在这里漏掉了什么吗? - Wildcard将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
函数,该函数将删除它们。
git clean
不应该 删除被忽略的文件。(您必须指定-x
选项才能删除被忽略的路径。) - Amber.gitignore
ж–Ү件дёӯеҢ…еҗ«data/
иҖҢдёҚжҳҜdata/*
пјҢдҪ дјҡйҒҮеҲ°зӣёеҗҢзҡ„й—®йўҳеҗ—пјҹ - VonCfoo/*
不会忽略foo
文件夹 - 它只会忽略文件夹内的文件。这可能是为什么git clean
会清除它的原因 - 因为它看到了一个名为foo
的 "未被忽略的文件夹",因此将其删除(这恰好也会删除其所有内容)。 - Amber