`

Java删除svn文件

    博客分类:
  • Tool
阅读更多
现在很多公司采用SVN开发,其版本管理的确很不错.
但是有一点很让人郁闷,就是源代码的.svn文件会很多,而且当Java源码代或者配置文件改变多次时,会生成很多版本,svn的大小可能是源代码的N倍.
如果想把某个目录的svn文件去掉,可以自己写个程序去删除.svn目录下的所有文件.方便又时用,我这里采用的是commons-io.jar 里的 DirectoryWalker,看到名称就能理解“目录散步”。
废话不说了,代码如下:
package com.ycl.filter.FileCleaner;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.io.DirectoryWalker;

public class FileCleaner extends DirectoryWalker {

	public FileCleaner() {
		super();
	}

	public List<File> clean(File startDirectory) throws IOException {
		List<File> results = new ArrayList<File>();
		walk(startDirectory, results);
		return results;
	}

	@Override
	protected void handleStart(File startDirectory, Collection results)
			throws IOException {
		System.out.println("-------开始清除-------");
	}

	@Override
	protected void handleEnd(Collection results) throws IOException {
		System.out.println("-------结束清除-------");
	}

	@Override
	protected void handleCancelled(File startDirectory, Collection results,
			CancelException cancel) throws IOException {
		System.out.println("-------清除异常-------");
		super.handleCancelled(startDirectory, results, cancel);
	}

	@Override
	protected boolean handleIsCancelled(File file, int depth, Collection results)
			throws IOException {
		//这里可以设置断点,比如当你找到某个类的时候,停止遍历,默认继续
		return false;
	}

	@Override
	protected void handleDirectoryStart(File directory, int depth,
			Collection results) throws IOException {
	//	System.out.println("****开始处理:"+directory.getName()+"deep:"+depth+"results:"+results.toString());
	}

	@Override
	protected void handleDirectoryEnd(File directory, int depth,
			Collection results) throws IOException {
	//	System.out.println("****结束处理:"+directory.getName()+"deep:"+depth+"results:"+results.toString());
	}

	@Override
	protected void handleRestricted(File directory, int depth,
			Collection results) throws IOException {
		System.out.println("****受限制目录:"+directory.getName()+"deep:"+depth+"results:"+results.toString());
	}

	/**
	 * 是否处理某个目录.返回false 不处理
	 *
	 * @see 这里直接删除.svn.然后不处理.
	 */
	@Override
	protected boolean handleDirectory(File directory, int depth,
			Collection results) {
		// delete svn directories and then skip
		if (".svn".equals(directory.getName())) {
			deleteDirectory(directory,results);
			return false;
		} else {
			results.add(directory);//删除.svn,还有哪些文件夹
			return true;
		}

	}

	/**
	 * 删除文件,并把文件加到删除列表中
	 */
	@Override
	protected void handleFile(File file, int depth, Collection results) {
		// delete file and add to list of deleted
		//file.delete();
		//results.add(file);
		//删除.svn文件后,还有哪些文件
	}

	/**
	 * 删除目录及目录下的文件夹和文件
	 * @param directory
	 * @param results
	 */
	private void deleteDirectory(File directory,Collection results){
		if(directory.isDirectory()){
			File[] list = directory.listFiles();
			for(File file:list){
				deleteDirectory(file,results);
			}
		}
		Log(directory.delete(),directory);
		results.add(directory);//删除文件
	}

	/**
	 * 删除文件或者目录失败日志
	 * @param flag
	 */
	private void Log(boolean flag,File directory){
		if(!flag){
			System.err.println("删除文件失败:"+directory.getAbsolutePath());
		}else{
			System.out.println("delete:"+directory.getAbsolutePath());
		}
	}
}


测试代码如下:
package com.ycl.filter.FileCleaner;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class TestFileCleaner {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileCleaner cleaner = new FileCleaner();
		File startDirectory = new File("D:\\workspace\\branches\\pamirsshop_branches_8-30");
		List<File> list = cleaner.clean(startDirectory);
		for(File file:list){
		//	System.out.println("file:"+file.getAbsolutePath());
		}
		System.out.println("共处理"+list.size()+"个文件");

	}
}

测试结果如下:
...
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\.svn
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\text-base\assembly.xml.svn-base
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\text-base
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\prop-base
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\props
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\tmp\text-base
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\tmp\prop-base
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\tmp\props
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\tmp
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\all-wcprops
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn\entries
delete:D:\workspace\branches\pamirsshop_branches_8-30\deploy\src\main\assembly\.svn
-------结束清除-------
共处理3331个文件

记得我刚碰到svn的这个问题的时候,也是到处找工具,有没有啥工具可以去掉.svn的,现在想想,自己是程序员,遇到问题,自己开发一个不就完了嘛,实用又方便.
5
5
分享到:
评论
23 楼 qq373752247 2012-11-30  
a123159521 写道
qq373752247 写道
楼上的所有人们、能说的详细点吗?
小弟遇到问题了、
服务器有个test.property、同时也在SVN里、(服务器跟SVN有可能不在同一机器上)
在服务器奔溃时、我们得从SVN里拿到最最初的那个文件、(因为这个test.property是可以通过web修改的、)
然后替换掉、重新跑、想接近全自动、
有谁知道可以通过Java类去SVN上拿文件吗?


换位思考,你备份一份test.property不就好了,你的这种场景设定有点不明智,文件最好不要改变,可以改变文件内容在“内存”中的数据,如果崩溃了,重新读取文件就可以了.




你这种思想不对、我们要的是完美、自动、
而不是随便找个方法解决问题、
22 楼 qq373752247 2012-11-30  
a123159521 写道
qq373752247 写道
楼上的所有人们、能说的详细点吗?
小弟遇到问题了、
服务器有个test.property、同时也在SVN里、(服务器跟SVN有可能不在同一机器上)
在服务器奔溃时、我们得从SVN里拿到最最初的那个文件、(因为这个test.property是可以通过web修改的、)
然后替换掉、重新跑、想接近全自动、
有谁知道可以通过Java类去SVN上拿文件吗?


换位思考,你备份一份test.property不就好了,你的这种场景设定有点不明智,文件最好不要改变,可以改变文件内容在“内存”中的数据,如果崩溃了,重新读取文件就可以了.



首先、这份文件是可以变动的、变动之后是有不同结果的、不同时候有不同需要、
21 楼 a123159521 2012-11-28  
qq373752247 写道
楼上的所有人们、能说的详细点吗?
小弟遇到问题了、
服务器有个test.property、同时也在SVN里、(服务器跟SVN有可能不在同一机器上)
在服务器奔溃时、我们得从SVN里拿到最最初的那个文件、(因为这个test.property是可以通过web修改的、)
然后替换掉、重新跑、想接近全自动、
有谁知道可以通过Java类去SVN上拿文件吗?


换位思考,你备份一份test.property不就好了,你的这种场景设定有点不明智,文件最好不要改变,可以改变文件内容在“内存”中的数据,如果崩溃了,重新读取文件就可以了.
20 楼 qq373752247 2012-11-27  
楼上的所有人们、能说的详细点吗?
小弟遇到问题了、
服务器有个test.property、同时也在SVN里、(服务器跟SVN有可能不在同一机器上)
在服务器奔溃时、我们得从SVN里拿到最最初的那个文件、(因为这个test.property是可以通过web修改的、)
然后替换掉、重新跑、想接近全自动、
有谁知道可以通过Java类去SVN上拿文件吗?
19 楼 wmswu 2011-06-22  
nighty 写道
一个批处理就可以了。
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
echo clear done!

denger 写道
find . -type d -iname ".svn" -exec rm -Rf {} \;

18 楼 denger 2011-06-21  
find . -type d -iname ".svn" -exec rm -Rf {} \;
17 楼 lifangling_2010 2011-06-21  
这个 没事 楼主只是练习,挺好的。
16 楼 raojl 2011-06-21  
1、批处理
2、revert it.
15 楼 energykey 2011-06-21  
a baby program.
14 楼 bluepeer 2011-06-21  
不解 为什么要这样呢 SVN 不是有Export的功能吗。不就可以干净的拿出来吗?
13 楼 baidd 2011-06-21  
非编译的的文件直接用导出功能,如模板,页面等。
需要编译的文件(在我们的svn中编译后的类文件没有提交到svn,svn中只提交源代码),我一般用压缩工具中的打包排除功能(写个正则,忽略.svn文件)。
12 楼 a123159521 2011-06-21  
fangzhu19880123 写道
lzxz1234 写道
方法很多,你的最笨,windows系统自带搜索功能也足以,ctrl+a,shift+del

+1
我一般就这么用的

如果只是简单的逻辑,你直接到目录下,删除文件都可以,如果加一些规则你就做不了了
11 楼 Aaron_Zhang 2011-06-21  
我一般就有 xcopy WebRoot _WebRoot /i /s 回车
10 楼 fangzhu19880123 2011-06-21  
lzxz1234 写道
方法很多,你的最笨,windows系统自带搜索功能也足以,ctrl+a,shift+del

+1
我一般就这么用的
9 楼 a123159521 2011-06-21  
大家说的都有道理,可以使用系统的批处理,也可以使用svn的工具清除.
我有以下几个问题:
   1. 系统dos命令,或许可以清除.svn等文件,但是能处理更复杂的情况吗?自己编写的Java程序不仅可以处理.svn,如果我只清除.svn的某些只读的文件,或指定文件呢,可扩展性绝对是自己编写逻辑最实用.
  2. 使用svn的工具,如8楼所说,如果工具出问题,你怎么办,还有办法吗?,工具出问题的概念不低,使用svn的人都说明,有的时候svn会傻B的.
综上所述,自己编写程序,自己信得过.
8 楼 cheney_love 2011-06-21  
bommeibo 写道
iamlipeng 写道
建议你先学习一下svn的基本使用吧,使用svn自身就可以解决的基本问题,为什么要自己写程序呢?代码“检出”和“导出”的区别而已。

+2 正解。

楼主解决的是当svn出现异常的情况,比如因误删了某些.svn文件,导致svn本身不能导出,以前遇到过,当时写了个递归搞定。
7 楼 bommeibo 2011-06-20  
iamlipeng 写道
建议你先学习一下svn的基本使用吧,使用svn自身就可以解决的基本问题,为什么要自己写程序呢?代码“检出”和“导出”的区别而已。

+2 正解。
6 楼 huhu_long 2011-06-20  
iamlipeng 写道
建议你先学习一下svn的基本使用吧,使用svn自身就可以解决的基本问题,为什么要自己写程序呢?代码“检出”和“导出”的区别而已。

nighty 写道
一个批处理就可以了。
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
echo clear done!


+1 Checkout vs Export
5 楼 lzxz1234 2011-06-20  
方法很多,你的最笨,windows系统自带搜索功能也足以,ctrl+a,shift+del
4 楼 vb2005xu 2011-06-20  
用批处理 环能 整合到 右键菜单 多爽

相关推荐

    用来删除SVN文件

    用来删除SVN文件用来删除SVN文件用来删除SVN文件用来删除SVN文件

    快速清除SVN文件

    可以快速的清除所有的.SVN文件 可以快速的清除所有的.SVN文件

    java代码下载svn上的项目

    用java代码下载svn上的项目,包含svnkit的jar包,可以根据版本号下载项目,同路径下会删除原来下载过的项目。

    用java代码删除项目中的.svn文件

    更新svn地址需要删除项目中svn版本文件 。代码删除项目中的.svn文件

    删除svn文件的java代码

    ### 删除SVN文件的Java代码知识点解析 #### 一、代码功能概述 本文将深入解析一个用于删除Subversion(简称SVN)版本控制系统中的`.svn`文件夹的Java程序。该程序通过递归的方式遍历指定目录下的所有子目录与文件,...

    java操作svndemo

    Subversion是一个开源的版本控制系统,用于管理文件和目录的不同版本,而Java则是一种广泛使用的编程语言,提供了丰富的库来实现对SVN的操作。 在Java中,我们通常会使用第三方库如SVNKit来实现对SVN仓库的访问和...

    svnkit插件开发包 支持Java开发svn一键打包

    这个压缩包提供的"svnkit-1.10.6"是SVNKit的一个版本,包含了支持Java开发的SVN插件所需的jar文件。 一、SVNKit基础 SVNKit提供了丰富的API,覆盖了SVN的大多数功能,包括但不限于创建、检查、更新、提交、合并、...

    java实现的svn统计修改代码行数完整源码

    例如,Java代码可能需要处理import语句的变化,而XML文件则需要关注标签的增删。 3. **处理合并冲突**:在多人协作的环境中,可能会有合并冲突的情况,此时需要正确处理这些特殊情况。 4. **性能优化**:如果SVN仓库...

    java版SVN后台统计程序

    3. **每日变更统计**:程序会定期检查SVN仓库,收集自上一次检查以来的所有提交记录,包括修改、添加、删除的文件或目录,以及每个提交的作者和时间戳。 4. **锁定管理**:除了提交记录,程序还会关注文件和目录的...

    java 源代码 软件 自动删除 svn 目录下的 所有svn文件

    java源代码,用于删除svn目录下的所有svn文件名包含svn的文件。可以让工程恢复到没有加入到svn时的状态。 支持命令行删除,也可在修改程序自己删除

    DelSVN 删除svn

    标题 "DelSVN 删除svn" 暗示我们要讨论的是如何在计算机系统中删除Subversion(简称SVN)的相关配置和文件。Subversion是一个广泛使用的版本控制系统,用于管理软件项目中的源代码和其他文件的变更。然而,有时用户...

    清除项目中的svn文件

    总之,`FileCleaner.java`和`TestFileCleaner.java`共同构成了一个用于清除项目中SVN文件的Java工具,帮助开发者高效地维护代码仓库,确保项目发布时不包含不必要的版本控制信息。在使用时,需谨慎操作,避免误删...

    去除java类中svn地址工具

    它的主要任务是删除Java源代码文件中的SVN元数据,使得文件可以在不引发冲突的情况下进行替换。 在Java类文件中,SVN的元数据通常隐藏在`.svn`目录下,这个目录包含了关于文件历史、版本信息等。当我们在进行版本...

    java删除cvs或者svn文件

    //如果删除svn或者cvs文件夹则将第二个参数改为SVN或者CVS,第一个参数是项目路径 //如果项目叫 EXTDemo放在D盘 workspaces文件夹下, //new RemoveFolder("D:\\workspace\\EXTDemo","CVS"); new Remove...

    timerTask定时任务使用java代码操作svn

    SVNKit是一个纯Java实现的SVN客户端库,提供了丰富的API,可以实现对SVN的各种操作,如添加、删除、提交、更新等。 - 首先,需要在项目中引入SVNKit依赖,然后创建SVNClientManager实例,这是所有SVN操作的基础。 ...

    解除SVN文件关联

    例如,它可能会删除与SVN相关的文件扩展名关联,如`.java`、`.cpp`等。 3. **运行注册表脚本**:双击`DeleteSVN.reg`文件,会弹出确认对话框,点击“是”以导入脚本内容。注册表编辑器会根据脚本中的指令进行修改。...

    svn安装包,java开发工具

    5. **查看差异**: `svn diff`用于查看文件的修改差异,`svn status`则可以查看文件的状态(如已修改、新增、删除等)。 6. **解决冲突**: 当多人同时修改同一份文件时,可能会出现冲突。SVN会标记出冲突的文件,...

    删除svn信息的Java实现代码

    在Java编程环境中,删除SVN...总的来说,删除SVN信息的Java实现主要涉及文件系统操作,特别是文件和目录的删除。在实际应用中,应谨慎处理这类操作,避免误删重要文件,并考虑异常处理和权限检查,以提高代码的健壮性。

    windows下批量删除.svn文件

    windows下批量删除.svn文件,cmd下面一条语句就搞定!

    Java Web版SVN 配置管理工具(远程建立仓库,修改密码,设置权限等)

    根据给定文件内容,下面是关于Java Web版SVN配置管理工具相关知识点的详细阐述。 ### 1. SVNAdmin概念及优势 - **SVNAdmin是什么**:SVNAdmin是一个基于Java开发的Web应用工具,用于管理SVN服务器上的项目用户。...

Global site tag (gtag.js) - Google Analytics