使用pysvn与SVN进行交互

it2022-05-05  115

利用pysvn使用代码与SVN进行交互

一、从远端仓库检出到本地

import time import pysvn import datetime def get_login(realm, username, may_save): retcode = True # True,如果需要验证;否则用False username = 'python' # 用户名 password = '123456' # 密码 save = False # True,如果想之后都不用验证;否则用False return retcode, username, password, save # TODO 这里的 ssl_server_trust_prompt 函数需要自己定义, 详见:https://www.e-learn.cn/content/wangluowenzhang/1654243 def ssl_server_trust_prompt(trust_dict): return (True # server is trusted , trust_dict["failures"] , True) # save the answer so that the callback is not called again client = pysvn.Client() client.callback_ssl_server_trust_prompt = get_login client.callback_ssl_server_trust_prompt = ssl_server_trust_prompt # TODO 当检测到版本有变动时在从远端仓库下载, 检出 client.update(r'C:\Users\yueguang\Desktop\project_A') # 本地仓库,状态 entry = client.info(r'C:\Users\yueguang\Desktop\project_A') print(u'SVN路径:', entry.url) print(u'最新版本:', entry.commit_revision.number) print(u'提交人员:', entry.commit_author) print(u'更新日期:', datetime.datetime.fromtimestamp(entry.commit_time)) t = time.localtime(entry.commit_time) #最新提交的时间 print('最新提交的时间:', time.strftime('%Y-%m-%d %H:%M:%S', t)) print("-------------ok")

执行结果:

二、获取远端仓库的版本等信息,不用检出

import pysvn def get_login(realm, username, may_save): retcode = True # True,如果需要验证;否则用False username = 'python' # 用户名 password = '123456' # 密码 save = False # True,如果想之后都不用验证;否则用False return retcode, username, password, save # TODO 这里的 ssl_server_trust_prompt 函数需要自己定义, 详见:https://www.e-learn.cn/content/wangluowenzhang/1654243 def ssl_server_trust_prompt(trust_dict): return (True # server is trusted , trust_dict["failures"] , True) # save the answer so that the callback is not called again client = pysvn.Client() client.callback_ssl_server_trust_prompt = get_login client.callback_ssl_server_trust_prompt = ssl_server_trust_prompt entries_list = client.ls('https://yueguang.jiean.net/svn/test/project_A') print('-'*90) print(entries_list) for en in entries_list: print() print('文件的仓库路径 -----> ',en.name) #文件属性 print('文件大小 -----> ',en.size) #文件属性 print('文件更新时间 -----> ', en.time) #文件属性 print('最新的提交者 -----> ',en.last_author) #文件属性 print('文件的revision 版本 -----> ', en.created_rev) #文件的revision print('文件类型 -----> ', en.kind) #文件类型,file,dir,none,unknown 可以通过str(kind)=='file'判断 print('en.time 类型 ----------:', type(en.time)) print('en.created_rev 类型 ----------:', type(en.created_rev)) print() print('-'*90)

执行结果:

三、检测状态,获取各种新增、删除、修改、冲突、未版本化的状态

import pysvn def get_login(realm, username, may_save): retcode = True # True,如果需要验证;否则用False username = 'python' # 用户名 password = '123456' # 密码 save = False # True,如果想之后都不用验证;否则用False return retcode, username, password, save # TODO 这里的 ssl_server_trust_prompt 函数需要自己定义, 详见:https://www.e-learn.cn/content/wangluowenzhang/1654243 def ssl_server_trust_prompt(trust_dict): return (True # server is trusted , trust_dict["failures"] , True) # save the answer so that the callback is not called again client = pysvn.Client() client.callback_ssl_server_trust_prompt = get_login client.callback_ssl_server_trust_prompt = ssl_server_trust_prompt """ changes ---> 是一个列表,显示的是本地仓库文件 、文件夹的路径信息 """ changes = client.status(r'C:\Users\yueguang\Desktop\project_A') # 检测状态,获取各种新增、删除、修改、冲突、未版本化的状态 print(changes) print() 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')

执行结果:

四、相关资源

1、Windows10环境下使用VisualSVN server搭建SVN服务器:https://blog.csdn.net/qq_32786873/article/details/80535567 2、pysvn安装包下载:链接一 、链接二 3、python学习-SVN常用命令:https://blog.csdn.net/mjx91282041/article/details/11630643 4、SVN-钩子祥解与配置:https://www.cnblogs.com/gaohj/p/3154448.html 5、Svn提交后触发Jenkins自动构建:http://pysvn.tigris.org/project_downloads.html


最新回复(0)