如何批量删除svn存储库中的文件/目录

时间:2014-03-20 12:20:55

标签: svn tortoisesvn visualsvn-server ankhsvn

  

使用:VisualSVN服务器,TortoiseSVN,AnkhSVN

我使用TortoiseSVN为我的所有.NEt项目和我想要保留的源/资源进行初始存储库加载。

我计划在Visual Studio解决方案中使用tortoiseSVN进行所有常规源代码控制操作和AnkhSVN。

我的问题是我的存储库现在有我不需要的开发人员/机器特定的文件/目录。

我知道,如果您从Visual Studio中将解决方案添加到存储库,则使用Microsoft的SCC API的Ankhsvn不包含它们。

所以我现在需要的是去批量从svn存储库中删除必要的文件/目录。

这些包括(但我可以添加更多):

thumbs.db Thumbs.db *.bak *.class *.exe *.dll *.mine *.obj *.ncb *.lib *.log *.idb *.pdb *.ilk *.msi* .res *.pch *.suo *.exp *.*~ *.~* ~*.* cvs CVS .CVS .cvs release Release debug Debug ignore Ignore bin Bin obj Obj Generated Logs *.csproj.user *.user

我怎么能一个接一个地去做呢?

其他信息:

一个想法是Micha提出的HERE,但必须在移动到存储库之前发生。

2 个答案:

答案 0 :(得分:2)

我总是建议开发人员使用AnkhSVN,而不是在使用VisualStudio项目时使用TortoiseSVN。 AnkhSVN不允许您将私人用户文件签入VIsualStudio项目。

要删除这些文件,您必须签出存储库才能删除单个文件。现在有办法解决这个问题。遗憾...

首先,您需要一个VisualStudio文件列表that shouldn't be in your Subversion repository

然后,您应该获得Subversion客户端的Windows命令行版本。您可以从SlikSVN获取此信息。基于命令行的Subverison客户端将允许您以编程方式删除不需要的文件,而无需一次只追踪它们。

例如,如果您使用Cygwin在Windows系统上提供类似GNU / Linux的环境,则可以执行以下操作:

$ svn checkout $repo-project $workdir
$ find $workdir \( -name "*.suo" -o -name "*.csproj.user" \) -exec svn delete {} \;
$ svn commit -m"Removing all VisualStudio private files from repo" $workdir

或者您可以编写一个简短的Perl,Python甚至PowerShell程序来为您执行此操作。

如果您不了解PowerShell,那么在PowerShell中这可能是一个很好的第一个项目。自XP以来的所有Windows版本都带有PowerShelL。 PowerShell是一种非常强大的脚本语言 - 比Windows Batch强大得多,甚至比Bash shell脚本更强大。哎呀,它在脚本实力上相当于Python或Perl。我根本不明白为什么它在基于Windows的开发网站中很少使用。但是,如果你确实学习了它,你会发现它是各种Windowy东西的强大工具。 PowerShell与Windows注册表,IIS和各种系统服务集成。

删除所有这些用户文件后,您可以使用此Subversion pre-commit将其永久保存在Subversion存储库中。控制文件条目将是这样的:

[FILE You cannot add private user files into a VisualStudio project]
match = VSproject/.*/\.(suo|user|webinfo|dll|exe)$
access = no-add
users = @ALL

答案 1 :(得分:0)

最好的方法是在导入到SVN之前在VS中进行清理。

如果文件仍在存储库中,我建议您进行两次检出。在其中一个打开VS进行清理,然后进行基于文件/目录的两个检出比较(并删除差异)。