pysvn安装及常用方法
centos 6.5,svn 1.6.11,pysvn 1.7.6,文章内容来自官网文档:http://pysvn.tigris.org/docs/pysvn_prog_guide.html
直接用yum安装即可
yum install pysvn -y
创建一个client
import pysvn def get_login(realm, username, may_save): retcode = True #True,如果需要验证;否则用False username = 'myuser' #用户名 password = 'mypwd' #密码 save = False #True,如果想之后都不用验证;否则用False return retcode, username, password, save client = pysvn.Client() client.callback_get_login = get_login
用这个client进行下面的各种操作
svnurl = 'svn://......' #svn的路径 outpath = './test' #检出到的目标路径 client.checkout(svnurl, outpath) #检出最新版本 rv = pysvn.Revision(pysvn.opt_revision_kind.number, 1111)) client.checkout(svnurl, outpath, revision=rv) #检出指定版本
#Revision类型可以通过rv.number获取对应的数字
entry = client.info('./test') print entry.url #拷贝对应的svn url print entry.commit_revision #最新提交的revision print entry.commit_author #最新提交的用户 import time t = time.localtime(entry.commit_time) #最新提交的时间 print time.strftime('%Y-%m-%d %H:%M:%S', t)
entries_list = client.ls('./other') for en in entries_list: print en.name,en.size,en.time,en.last_author #文件属性 print en.created_rev #文件的revision print en.kind #文件类型,file,dir,none,unknown 可以通过str(kind)=='file'判断
client.update('./test') #更新
changes = client.status('./test') #检测状态,获取各种新增、删除、修改、冲突、未版本化的状态 for f in changes: if f.text_status == pysvn.wc_status_kind.added: print f.path,'A' elif f.text_status == pysvn.wc_status_kind.deleted: print f.path,'D' elif f.text_status == pysvn.wc_status_kind.modified: print f.path,'M' elif f.text_status == pysvn.wc_status_kind.conflicted: print f.path,'C' elif f.text_status == pysvn.wc_status_kind.unversioned: print f.path,'U'
tmppath = '/tmp' #对比需要使用临时文件,这个是临时文件的位置,会自动清除 print client.diff(tmppath, './svntest') #效果与svn diff一致
client.add('./svntest/add.txt') #添加一个文件到版本控制 client.revert('./svntest/modify.txt') #还原文件的修改 client.move('./svntest/move1.txt', './svntest/move2.txt') #重命名或移动 client.remove('./svntest/delete.txt') #删除文件或目录 client.mkdir('./svntest/testdir', '提交message') #新建一个文件夹,提交message这里没用,当第一个参数是svnurl时直接提交才有用
client.checkin(['./svntest/delete.txt'], '提交message') #提交一个或多个修改
entries_list = client.log('./other', discover_changed_paths=True) for en in entries_list: print en.author,en.date,en.message,en.revision #版本信息 for e in en.changed_paths: print '\t',e.path,e.action #版本具体修改的信息
over