代码之家  ›  专栏  ›  技术社区  ›  e4rthdog

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

  •  5
  • e4rthdog  · 技术社区  · 12 年前

    使用:VisualSVN服务器、TortoiseSVN、AnkhSVN

    我使用TortoiseSVN为我所有的.NEt项目和我想保留的支持源/资源创建了一个初始存储库加载。

    我计划在所有常规源代码管理操作中使用tortoiseSVN,在Visual Studio解决方案中使用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 回复  |  直到 12 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    我始终建议开发人员在使用VisualStudio项目时使用AnkhSVN,而不要使用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是一种非常强大的脚本语言——比WindowsBatch强大得多,甚至比Bashshell脚本更强大。见鬼,它的脚本能力相当于Python或Perl。我只是不明白为什么在基于Windows的开发站点中很少使用它。然而,如果你学会了它,你会发现它是一个强大的工具,可以用来处理各种Windowy的东西。PowerShell与Windows注册表、IIS和各种系统服务集成。

    删除所有这些用户文件后,可以使用此子版本 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
    
        2
  •  0
  •   Micha    12 年前

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

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

    推荐文章