git通配符-删除子目录的所有实例

git通配符-删除子目录的所有实例,git,version-control,find,Git,Version Control,Find,我试图执行git rm--cached-r以递归方式删除名为.svn的文件夹的所有实例。我试过这个: .svn /.svn /*/.svn /*/*/.svn etc 这是可行的,但我相信有一种更具活力的方式 谢谢如果您的工作树中没有任何其他更改(您可以先将其隐藏),可能有一种更简单的方法: find -type d -name .svn -delete git add -u git commit -m 'remove svn folders -- no idea which maniac

我试图执行
git rm--cached-r
以递归方式删除名为.svn的文件夹的所有实例。我试过这个:

.svn
/.svn
/*/.svn
/*/*/.svn

etc 
这是可行的,但我相信有一种更具活力的方式


谢谢

如果您的工作树中没有任何其他更改(您可以先将其隐藏),可能有一种更简单的方法:

find -type d -name .svn -delete
git add -u
git commit -m 'remove svn folders -- no idea which maniac would stage them'
如果您只想取消对它们的分级,而不想实际删除它们,请使用:


find
、管道和
xargs
是您的朋友:

find . -name .svn | xargs git rm -r 

正确的解决办法是:

find . -type d -name '.svn' -print0 | xargs -0 git rm --cached -r --
@gregor将在带有空格的目录上失败

find . -name .svn -exec git rm -r --cached {} \;
如果不需要,则无需致电xargs。

这对我来说很有效:

find . -name '.svn' -print0 | xargs -0 git rm --cached --ignore-unmatch -r --

感谢@steve76的--ignore unmatch

以防万一:请注意,Git能够很好地导入SVN存储库,保留历史记录。如果出现“不匹配…”错误,请在Git命令上使用--ignore unmatch。4岁,但仍然是谷歌的最佳搜索结果。对于
find
中的新手,您可以在
-name
参数中使用通配符(
*
),并将
类型更改为
-f
(而不是
-d
)来搜索文件。不要忘记
——忽略不匹配的
,正如@steve76上面所说的。
find . -name '.svn' -print0 | xargs -0 git rm --cached --ignore-unmatch -r --