我的文件中有以下条目.gitignore,我想删除它们。原因是这些文件是 TeX 编译期间创建的临时垃圾文件,我希望能够删除它们。
我怎样才能做到这一点?
meu*_*rus 10
git clean -Xdf
Run Code Online (Sandbox Code Playgroud)
使用大写时-X,git clean 仅删除匹配的文件.gitignore。
使用-d,git clean还会删除匹配的整个目录.gitignore。
使用-f,git clean实际上会删除内容而不是警告您。不过要小心。可能还有其他原因(例如个人direnv配置).gitignored,因此请确保在运行该命令之前始终了解该命令将执行的操作。
特别感谢@Kusalananda 的分享git clean。
作为替代方案,如果您有一个包含符号链接目录的依赖项文件夹,并且您不想git clean递归删除这些目录中的所有内容,则可以使用以下较长的形式:
git ls-files --others --ignored --exclude-standard --directory | head -c -1 | tr '\n' '\0' | xargs -0 -r rm -r
Run Code Online (Sandbox Code Playgroud)
git ls-files使用这些选项列出与 相同的目录git clean -Xdn,但更具机器可读性。
head -c -1修剪尾随换行字节。
tr '\n' '\0'将所有换行符转换为NULs。
xargs -0 -r rm -r删除文件和目录。-0做NUL分隔符。-r导致它跳过空输入(警告:这是一个不可移植的 GNU 扩展)。
git clean -X -f -n
Run Code Online (Sandbox Code Playgroud)
git clean -X将删除与.gitignore. 最后-n导致它实际上并不删除文件,而只是进行试运行,报告本来会被删除的文件。
添加-d以同时删除被忽略的目录。
如果没有-X,它会删除未跟踪的文件(但不会删除被忽略的文件)。
看git clean --help。
在您的情况下,如果您的文件条目.gitignore不是以以下开头!,那么这一行应该适合您:
while read -r entry;do rm -rf ${entry}; done < .gitignore
Run Code Online (Sandbox Code Playgroud)