`

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文件

    删除svn文件的java代码

    System.out.println("删除文件成功:" + file.getAbsolutePath()); } else { System.out.println("删除文件失败:" + file.getAbsolutePath()); } } } directory.delete(); System.out.println("删除目录...

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

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

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

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

    java删除cvs或者svn文件

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

    windows下批量删除.svn文件

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

    java代码下载svn上的项目

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

    清除项目中的svn文件

    清除代码中的svn文件的java工具类,非常好用

    svn两个版本之间改动的文件列表

    svn两个版本之间改动的文件列表 包括新增和更新的文件 用PYTHON写的脚本

    删除.svn脚本

    用于删除项目多余的.svn,用法:放在根目录下,根目录里的所有.svn文件都会删除,包括子目录下的!

    SVN出错无法Clean up,无法update

    当svn出现无法cleanup,无法update的时候, 大部分时候我们都只能删除项目,重新获取。 但是涉及到有些工程几十个G,所以很耽误时间。 本工具解决大部分无法cleanup无法update问题。

    工具-SVN资助修改密码客户端-java版本

    但是都不尽如人意,最后决定自己手动实现,其实原理很简单,就是针对svn的秘钥文件进行增删改查,于是就用java实现了一个web服务。里面的注释写的很详细,有需要拿去直用~github地址:...

    svn客户端(小乌龟)断开连接

    SVN客户端 断开连接 : 如不放心可编辑查看该reg文件,双击执行,会将delete SVN Folders 加至右键快捷菜单,选中目标文件夹,右击执行,可把全部.svn文件删除,断开与svn服务器连接

    Eclipse离线安装SVN插件,将该文件解压后直播复制到你Eclipse安装目录下的dropins目录里即可。

    Eclipse离线安装SVN插件...注意安装 hibernate tools 和maven完成后,会导致 SVN插件不可用,需要将文件夹eclipse\configuration\org.eclipse.update这个文件夹含文件夹下面内容全部删除。重启eclipse就可正常使用了。

    svnkit1.3.5完整包

    svnkit1.3.5完整包svnkit1.3.5完整包

    删除某项目下的一些文件或文件夹

    1、一个删除某个文件夹下所有指定的文件或文件夹,包括子文件夹下的内容的工具。...3、主要用途:如有时下载或拷的代码中包含.SVN文件夹,而手动去删除.SVN,是会非常麻烦的,而使用该工具可以轻松搞定。

    svn更新工具类.rar

    根据起始版本号到最新版本号,把所有svn账号地址等信息填写完毕,会从svn日志中获取更改记录,下拉到指定文件夹,注意:删除没处理;然后会根据本地项目路径把java文件替换成class文件,路径自动生成,根据我们自己...

    java删除指定文件夹或者文件

    想要拷贝一份项目代码到家里,但是由于是从公司svn服务器上checkout下来的,其中有很多.svn文件。所以写了个小工具删除.svn文件夹。可以缩小整个工程大小。 package delete.file; import java.io.File; public...

    svn利用TortoiseSVN忽略文件或文件夹(目录)

    忽略已经版本控制的文件如果你不小心添加了一些应该被忽略的文件,...TortoiseSVN→提交父目录,TortoiseSVN会查看遗失文件和你从版本库标记删除的文件。将文件移到原始位置将文件添加到忽略文件,所以你不必再为此烦心

Global site tag (gtag.js) - Google Analytics