利用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