现在很多公司采用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的,现在想想,自己是程序员,遇到问题,自己开发一个不就完了嘛,实用又方便.
分享到:
相关推荐
用来删除SVN文件用来删除SVN文件用来删除SVN文件用来删除SVN文件
可以快速的清除所有的.SVN文件 可以快速的清除所有的.SVN文件
System.out.println("删除文件成功:" + file.getAbsolutePath()); } else { System.out.println("删除文件失败:" + file.getAbsolutePath()); } } } directory.delete(); System.out.println("删除目录...
更新svn地址需要删除项目中svn版本文件 。代码删除项目中的.svn文件
java源代码,用于删除svn目录下的所有svn文件名包含svn的文件。可以让工程恢复到没有加入到svn时的状态。 支持命令行删除,也可在修改程序自己删除
//如果删除svn或者cvs文件夹则将第二个参数改为SVN或者CVS,第一个参数是项目路径 //如果项目叫 EXTDemo放在D盘 workspaces文件夹下, //new RemoveFolder("D:\\workspace\\EXTDemo","CVS"); new Remove...
windows下批量删除.svn文件,cmd下面一条语句就搞定!
用java代码下载svn上的项目,包含svnkit的jar包,可以根据版本号下载项目,同路径下会删除原来下载过的项目。
清除代码中的svn文件的java工具类,非常好用
svn两个版本之间改动的文件列表 包括新增和更新的文件 用PYTHON写的脚本
用于删除项目多余的.svn,用法:放在根目录下,根目录里的所有.svn文件都会删除,包括子目录下的!
当svn出现无法cleanup,无法update的时候, 大部分时候我们都只能删除项目,重新获取。 但是涉及到有些工程几十个G,所以很耽误时间。 本工具解决大部分无法cleanup无法update问题。
但是都不尽如人意,最后决定自己手动实现,其实原理很简单,就是针对svn的秘钥文件进行增删改查,于是就用java实现了一个web服务。里面的注释写的很详细,有需要拿去直用~github地址:...
SVN客户端 断开连接 : 如不放心可编辑查看该reg文件,双击执行,会将delete SVN Folders 加至右键快捷菜单,选中目标文件夹,右击执行,可把全部.svn文件删除,断开与svn服务器连接
Eclipse离线安装SVN插件...注意安装 hibernate tools 和maven完成后,会导致 SVN插件不可用,需要将文件夹eclipse\configuration\org.eclipse.update这个文件夹含文件夹下面内容全部删除。重启eclipse就可正常使用了。
svnkit1.3.5完整包svnkit1.3.5完整包
1、一个删除某个文件夹下所有指定的文件或文件夹,包括子文件夹下的内容的工具。...3、主要用途:如有时下载或拷的代码中包含.SVN文件夹,而手动去删除.SVN,是会非常麻烦的,而使用该工具可以轻松搞定。
根据起始版本号到最新版本号,把所有svn账号地址等信息填写完毕,会从svn日志中获取更改记录,下拉到指定文件夹,注意:删除没处理;然后会根据本地项目路径把java文件替换成class文件,路径自动生成,根据我们自己...
想要拷贝一份项目代码到家里,但是由于是从公司svn服务器上checkout下来的,其中有很多.svn文件。所以写了个小工具删除.svn文件夹。可以缩小整个工程大小。 package delete.file; import java.io.File; public...
忽略已经版本控制的文件如果你不小心添加了一些应该被忽略的文件,...TortoiseSVN→提交父目录,TortoiseSVN会查看遗失文件和你从版本库标记删除的文件。将文件移到原始位置将文件添加到忽略文件,所以你不必再为此烦心