不管是从事什么IT职业,SVN的使用几乎是必须的。今天呢遇到一个问题,我想让一个目录脱离svn的管理,找了一些办法,说需要删除目录下的.svn目录,就可以解除管理(可能也有别的办法,但是我没找到),想一想这太麻烦了,所以想起了python,写个小的脚本,递归删除.svn目录
# -*- coding: cp936 -*-
import os
import stat
# 找到所有的.svn目录的全路径
def findSvnDir(root, svnList):
fileList = os.listdir(root);
for fileName in fileList:
filePath = os.path.join(root, fileName);
# 只有 filePath 是目录,并且目录名不为 .svn 才会递归
if os.path.isdir(filePath) and (fileName != ".svn"):
# 递归遍历
findSvnDir(filePath, svnList);
elif os.path.isdir(filePath) and (fileName == ".svn"):
# 找到了 .svn 的目录
svnList.append(filePath);
return svnList;
def deleteSvnDir(root):
fileList = os.listdir(root);
for fileName in fileList:
filePath = os.path.join(root, fileName);
filePath = filePath.replace("\\", "/");
# 判断找到的全路径是否是目录,如果是目录,则递归下去
if os.path.isdir(filePath):
deleteSvnDir(filePath);
# 递归完成之后,到达这里 -> 说明当前的目录已经是空目录,则删除空目录
if os.path.exists(filePath):
os.chmod(filePath, stat.S_IWRITE);
os.rmdir(filePath);
print ("删除空目录: " + filePath);
else:
# 找到的是文件,删除文件
if os.path.exists(filePath):
os.chmod(filePath, stat.S_IWRITE);
os.remove(filePath);
print ("删除文件: " + filePath);
def deleteSvnMgrFile(root):
svnList = [];
findSvnDir(root, svnList);
for fileName in svnList:
deleteSvnDir(fileName);
fileName = fileName.replace("\\", "/");
if os.path.exists(fileName):
os.chmod(fileName, stat.S_IWRITE);
os.rmdir(fileName);
print ("删除根目录: " + fileName);
if __name__ == '__main__':
deleteSvnMgrFile("C:/Test");
这样一段简单的脚本,就可以脱离SVN的管理啦
完工 ...
之后会经常更新博客,把自己学习到的,和总结出来的,一起分享给大家(如有错误,请大伙们及时提出哦)
后期主推 —— C++设计模式