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 --