我有一个要从git中删除的文本文件目录。但是目录中还有一些文件夹,其中也包含我要保留的文本文件。
如果我运行git rm *.txt
,我将摆脱当前目录中的大约一百个文本文件。但是子目录(也有文本文件)也会被删除。
如何仅删除当前目录中的文本文件,但不影响子目录中的文本文件?
好的,我在Windows 10上使用git。我从this directory开始,我有一个子目录looks like this,如果我给git rm ./*.txt命令{{3 }}和该目录中的文本文件一起消失。
我正在使用powershell命令行执行此操作。
答案 0 :(得分:4)
根据docs,提供目录名称只会删除该目录中的文件。
git rm ./*.txt
提供目录名称,需要显式传递-r
标志以递归地进入子目录。
更新:OP澄清了该命令正在Windows PowerShell中运行,并且显然以上命令在PowerShell中无法正常工作。应该可以使用Git Bash
。
答案 1 :(得分:0)
我最近的测试与您的描述相符-尽管有文档,但是如果您给出的路径带有前导目录和通配符文件名,即使没有-r
选项,它也会递归匹配。 / p>
我找到了两种解决方法:
一种方法是删除CMD中的文件,然后作为单独的步骤进行删除
del *.txt
git add *.txt
通常可以,但是如果您打算使用git rm --cached
,则可能会出现问题。
另一种方法是滥用shell的glob扩展。默认情况下,这种情况发生在bash
或类似的shell中,这就是为什么我们很多人从未注意到这种行为的原因。但据我所知,它并不是CMD中的真正选择。
答案 2 :(得分:-1)
您可以使用典型的命令行实用程序,而无需阅读Git文档的页面。在Unix系统上(或在Git Bash / Cygwin中):
cd folder
rm *.txt
git add -u