Subversion版本控制信息的清除

来源:互联网 发布:2014网络暴力案例 编辑:程序博客网 时间:2024/06/02 19:41

 有时候,你可能得到一份代码,里面含有很多的.svn目录,这就是Subversion的版本控制信息保存的目录,如果你只想要源代码树,你就得想么办法来清除它们。

 

你可以有很多种方法来实现,这里提供一种基于Windows命令行脚本的实现。

 

@ECHO    ********************************************************************
@ECHO    ***                                                              ***
@ECHO    ***  脚本功能:                                                  ***
@ECHO    ***    1) 递归删除当前目录及其所有子目录下的svn版本控制信息      ***
@ECHO    ***    2) 递归删除指定目录及其所有子目录下的svn版本控制信息      ***
@ECHO    ***                                                              ***
@ECHO    ***  版本:                                                      ***
@ECHO    ***    SvnInfoCleaner version 0.9                                   ***
@ECHO    ***                                                              ***
@ECHO    ***  版权:                                                      ***
@ECHO    ***    本脚本采用GNU版权协议分发,是作者开发的系列脚本工具之一。 ***
@ECHO    ***                                                              ***
@ECHO    ***  作者:svnLight@csdn.net                     ***
@ECHO    ***                                                              ***
@ECHO    ***  创建日期:2009年07月08日                                    ***
@ECHO    ***    初始版本0.9                                               ***
@ECHO    ***                                                              ***
@ECHO    ***  修订历史:                                                  ***
@ECHO    ***                                                              ***
@ECHO    ***    0.9)                                                      ***
@ECHO    ***      1. 实现基本功能                                         ***
@ECHO    ***      2. 支持目录中含有空格                                   ***
@ECHO    ***                                                              ***
@ECHO    ********************************************************************

@setlocal
@set StartDir=%CD%
@set /A FolderCounter=0

:: 如果指定了扫描路径,则进入该路径进行处理;否则,从当前路径开始处理。

@if not "%1"=="" ( if exist %1/nul cd /D %1 )
@ECHO Start Directory is [%CD%]

:: 设定临时文件名称
@SET TempFile=TempLst%DATE:~5,2%%DATE:~8,2%.txt
@ECHO TempFile=%TempFile%
:: 搜索所有的.svn目录

@dir /S /ad /b | findstr /E /C:".svn"  > %TempFile%

:: 如果是_svn目录,就用下面一行代码
::@dir /S /ad /b | findstr /E /C:"_svn" > %TempFile%
::type %TempFile%
:: 删除.svn目录树

@for /F "tokens=2* delims=:" %%I in (%TempFile%) do @if not "%%I"=="" (
  @ECHO Folder=[%%I]
  @rd /s /q "%%I"
  @set /A FolderCounter+=1
)

:: 删除创建的临时文件
@del /Q %TempFile%
@cd /D %StartDir%
@ECHO Return to Directory [%CD%]
@endlocal
@EXIT /B 0

 

在软件测试过程中,我遇到了带有版本信息的很大的目录树,通过测试之后,阶段性备份源代码时不需要版本控制信息了怎么办,于是就写了上面一段脚本,实现了所需要的功能。因为以前在网上看过类似的需求,所以贴出来与大家共享。

 

后来上网碰到了一段更高效的实现是利用for /f in(.)  的枚举特性,添加注释和必要的输出信息后的代码如下:

 

@echo OFF

@echo 删除SVN版本控制信息
 
::FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
::
::    检查以 [drive:]path 为根的目录树,指向每个目录中的
::    FOR 语句。如果在 /R 后没有指定目录,则使用当前
::    目录。如果set仅为一个单点(.)字符,则枚举该目录树(不含文件)。

 

for /r . %%I in (.) do @if exist "%%I/.svn" (
    @echo "Folder=[%%I/.svn]"
    @rd /s /q "%%I/.svn"
)

@echo Completed.

它递归处理当前目录及其所有子目录,删除所有的.svn信息

原创粉丝点击