`
caocao
  • 浏览: 272006 次
  • 来自: 上海
社区版块
存档分类
最新评论

SVN小文件清除脚本

阅读更多

隐士以前用惯了ClearCase,换到SVN有点不习惯。ClearCase下面的文件都可以直接Copy出来用,SVN下面的就麻烦了,每个目录下面一个.svn子目录,当你要把项目在Check In前拿去别用时,你就体会到你的项目不是一个项目,此刻SVN灵魂附体令你感觉别扭,当然,Check In后可以用SVN的Export来导出一个干净的项目。不爽,隐士整了个Python脚本,清除这些垃圾。

闲话不多,看脚本:

python 代码
  1. #!/usr/bin/python   
  2. # -*- coding: utf8 -*-   
  3.   
  4. #################################   
  5. #   Written by caocao           #   
  6. #   http://www.caocao.mobi      #   
  7. #   http://www.caocao.name      #   
  8. #################################   
  9.   
  10. import sysosstat  
  11.   
  12. def walk(path):   
  13.     for item in os.listdir(path):   
  14.         subpath=os.path.join(path, item)   
  15.         mode=os.stat(subpath)[stat.ST_MODE]   
  16.         if stat.S_ISDIR(mode):   
  17.             if item==".svn":   
  18.                 print "Cleaning %s ..." % subpath   
  19.                 print "%d deleted" % purge(subpath)   
  20.             else:   
  21.                 walk(subpath)   
  22.   
  23. def purge(path):   
  24.     count=0   
  25.     for item in os.listdir(path):   
  26.         subpath=os.path.join(path, item)   
  27.         mode=os.stat(subpath)[stat.ST_MODE]   
  28.         if stat.S_ISDIR(mode):   
  29.             count+=purge(subpath)   
  30.         else:   
  31.             os.chmod(subpath, stat.S_IREAD|stat.S_IWRITE)   
  32.             os.unlink(subpath)   
  33.             count+=1   
  34.     os.rmdir(path)   
  35.     count+=1   
  36.     return count  
  37.   
  38. if len(sys.argv)!=2:   
  39.     print "Usage: python SVNClean.py path"   
  40.     sys.exit(1)   
  41.   
  42. walk(sys.argv[1])  
分享到:
评论
12 楼 sutra 2007-04-04  
不爽的原因是因为svn export没有使用python来写,是吧?呵呵。
11 楼 duduwolf 2007-03-21  
唉,用的了这么麻烦吗?
在linxu下用robbin的法子,
在windows下用我的法子

在项目平级的目录,执行dos命令:
xcopy project_dir project_dir_1 /s /i
或者在项目根目录执行以下dos命令
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
10 楼 simohayha 2007-02-12  
Arbow 写道
robbin 写道
一行shell命令搞定

find . -type f -iname ".svn" -exec rm -rf {} \; 




应该是 -type d 吧,windows下可以用cygwin


就是 -type f吧.
9 楼 Arbow 2007-02-12  
robbin 写道
一行shell命令搞定

find . -type f -iname ".svn" -exec rm -rf {} \; 




应该是 -type d 吧,windows下可以用cygwin
8 楼 caocao 2007-02-12  
robbin 写道
一行shell命令搞定

find . -type f -iname ".svn" -exec rm -rf {} \; 




可惜在windows下,莫非cygwin也有类似的玩意?
7 楼 robbin 2007-02-12  
一行shell命令搞定

find . -type f -iname ".svn" -exec rm -rf {} \; 


6 楼 caocao 2007-02-12  
simohayha 写道
这个用shell 写的话,更简便吧.


一直紧跟python,shell编程涉入不深,只会最简单的 
windows上面貌似shell玩不转啊,要整vbs,不熟。
5 楼 simohayha 2007-02-12  
这个用shell 写的话,更简便吧.
4 楼 caocao 2007-02-12  
limodou 写道
svn有一个export命令,就是导出干净的目录和文件用的。


所言即是,这个命令不错,有时候并不是项目目录里面的所有文件都加入了version control,此刻该命令有点鸡肋了,索性直接copy,用这个删.svn目录,挺好。

SVN Document 写道

Name
svn export — Export a clean directory tree.

Synopsis
svn export [-r REV] URL[@PEGREV] [PATH]
svn export [-r REV] PATH1[@PEGREV] [PATH2]
Description
The first form exports a clean directory tree from the repository specified by URL, at revision REV if it is given, otherwise at HEAD, into PATH. If PATH is omitted, the last component of the URL is used for the local directory name.

The second form exports a clean directory tree from the working copy specified by PATH1 into PATH2. All local changes will be preserved, but files not under version control will not be copied.
3 楼 limodou 2007-02-12  
svn有一个export命令,就是导出干净的目录和文件用的。
2 楼 caocao 2007-02-12  
因为os.walk()不合要求,如果我要清除我所有进入SVN的项目里面的这类目录,文件、目录总量可能是几十万个,os.walk()比我的这个实现要慢一点,且无法进行多线程优化性能。我的这个,可以用多线程遍历和删除,没试过不知道性能能强多少。

下面是一个小测试,同样遍历我机器上的一个目录,里面有14116个目录,oswalk耗时平均比mywalk多近一秒。

引用

D:\temp>python mywalk.py
14116
0:00:17.922000

D:\temp>python oswalk.py
14116
0:00:18.844000


源码如下:

oswalk.py
import os
from datetime import datetime

path="D:\\program"
t1=datetime.now()
count=0
for dirpath, dirnames, filenames in os.walk(path):
	count+=1
	#print "%s/%s/%s" %(dirpath, dirnames, filenames)
print count
t2=datetime.now()
print t2-t1


mywalk.py
import os, stat
from datetime import datetime

def walk(path):
	count=1
	for item in os.listdir(path):
		subpath=os.path.join(path, item)
		mode=os.stat(subpath)[stat.ST_MODE]
		if stat.S_ISDIR(mode):
			count+=walk(subpath)
	return count

path="D:\\program"
t1=datetime.now()
print walk(path)
t2=datetime.now()
print t2-t1
1 楼 Arbow 2007-02-12  
为何要自己实现一个walk(),而非使用 os.walk() 函数?

相关推荐

    用于清除SVN脚本文件

    用于清除SVN脚本文件,双击文件,写入注册表以后,鼠标右键点击相应SVN文件夹目录,选择“Delete SVN Folders”,即可删除文件夹内的所有svn脚本信息

    清除SVN脚本

    "清除SVN脚本"通常是一个批处理文件(.bat),它通过执行一系列命令来移除项目中的SVN信息。这些命令可能包括: 1. 使用`svn export`命令:这个命令可以导出项目的一个干净副本,不包含任何版本控制信息。这是最...

    MacOS下去除.svn文件的sh脚本

    MacOs下去除.svn文件的sh脚本: 用法: 命令行中进入该脚本所在目录:如 cd xxx/sh/ 执行脚本:. rm_svn.sh xxx/test 就是删除xxx/test目录下所有的.svn文件 执行完成后会输出日志 显示已删除哪个目录下的哪些文件

    清除.svn残余文件工具

    总之,"清除.svn残余文件工具"是一个实用的批处理脚本,专门用来帮助SVN用户快速、有效地清理不再需要的版本控制元数据,从而优化磁盘空间利用率。在日常开发工作中,尤其是在大型项目或长时间使用SVN的环境下,这类...

    一键删除目录下SVN记录文件

    "一键删除"通常指的是通过一个简单快捷的方法,例如运行一个脚本或程序,来自动处理这个过程,避免手动查找和删除每个.svn文件。 标签“一键删除SVN”进一步强调了用户寻求的是一种简便、快速的解决方案,以一次性...

    清除文件中的SVN文件

    这时,“清除文件中的SVN文件”就显得尤为重要。 SVN在每个受控文件或目录下都会创建隐藏的`.svn`子目录,用于存储版本信息。这些文件虽然对于SVN操作是必要的,但它们并不总是需要存在于工作副本中,尤其是在进行...

    工程中svn清除脚本

    svn清除脚本 说明在批处理文件中有,svn资源文件出问题了?靠svn自己无法搞定 用它吧,把他们都删掉。

    清除svn文件的小工具

    这个名为 `清除SVN文件.bat` 的批处理文件,很可能是一个简单的 Windows 命令脚本,使用诸如 `rmdir` 或 `del` 命令来递归删除指定目录下的 `.svn` 文件夹。你可以根据自己的需求进行修改,例如添加参数以选择性地...

    SVN版本控制清除工具

    - 提供的"RemoveSvnControl"可能是这样的一个小工具,它可以批量删除指定目录下的所有.SVN子目录,方便快捷,尤其适用于处理大量文件的情况。 5. 注意事项: - 在删除.SVN前,请确认不再需要版本控制信息,因为这...

    清除svn脚本

    # 在某些情况下,可能还需要删除隐藏的.svn文件 find "$PROJECT_DIR" -type f -name ".svn" -exec rm -f {} \; ``` 这段脚本首先定义了工程的根目录`PROJECT_DIR`,然后使用`find`命令寻找所有名为`.svn`的目录并...

    清除SVN批处理文件和右键功能

    在本例中,这个脚本会在文件资源管理器的右键菜单中创建一个新的选项,名为“一键清除SVN文件”。这样,用户只需右键点击任何文件夹,选择这个新选项,就能快速调用`svndel.bat`进行SVN元数据的清理工作。注册表编辑...

    clearSVN清除svn文件

    它通常以批处理文件的形式存在,如提供的 `clearSVN.bat`,这样的批处理文件包含了执行一系列命令行操作的脚本。 在使用 `clearSVN.bat` 之前,首先需要了解几个基本概念: 1. **工作副本**:在SVN中,工作副本是...

    一键清除svn记录

    总的来说,“一键清除svn记录”是一种提高工作效率的方法,它结合了批处理文件和注册表脚本,使SVN工作副本的清理变得更加便捷。了解这一技巧,不仅可以帮助开发者更高效地管理项目,还能避免在日常工作中遇到不必要...

    删除.SVN文件脚本工具

    svn版本控制文件极大的改善了团队代码管理,但程序包正式发布到生产时,会遇到清除版本文件的问题,这样就会在服务器端产生多余的文件。采用删除svn版本脚本后,可以轻松生产完整包,直接发布到生产环境。

    svn自动清除 工具

    当你试图在同一个目录下创建新的svn库时,由于存在这些.svn文件,系统会识别到该目录已被版本化,从而无法成功创建新项目。 这个工具的作用是将一个清理svn文件的功能集成到Windows注册表中。在Windows操作系统中,...

    一键清除svn文件

    标题“一键清除svn文件”指的是一个工具或方法,主要用于快速清理计算机中与Subversion(SVN)相关的文件和目录。Subversion是一个版本控制系统,用于跟踪和管理软件项目的源代码和其他文件的更改。在开发过程中,...

    批量清除svn和csv版本控制文件

    批量清除版本控制文件通常涉及查找并删除特定类型的文件,如`.svn`(Subversion的工作副本目录)和`.csv`(假设这里指的是ClearCase的版本文件)。批处理命令是一种在Windows操作系统上自动化任务的有效方式,通过...

    svn清理脚本

    windows系统上清除.svn文件的脚本,亲试可用,666666。

    清除svn上残留的隐藏文件-boss级别的

    标题"清除svn上残留的隐藏文件-boss级别的"指的就是一个高级别或专业的解决方法来清理这些`.svn`文件。 在SVN的工作副本中,`.svn`目录存储了版本信息、元数据以及与服务器通信所需的文件。它们对于正常使用SVN是必...

Global site tag (gtag.js) - Google Analytics