有时候,你可能得到一份代码,里面含有很多的.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信息