使用详见官方文档,后面记录几个用到的方法
环境:win10,python3.7
http://pysvn.tigris.org/servlets/ProjectDocumentList?folderID=1768 下载对应版本,直接运行安装
环境:centos7,python3.7,pysvn1.8.0
centos下yum安装默认安装python2环境的
python3环境的安装参考这个
#python2 安装
yum install pysvn -y
踩坑记录:从我安装情况来看,pysvn似乎时不兼容python3.7,因为一直没装上,下面的报错2一直搞不定,网上搜索的教程就算装上了也特别麻烦,果断换环境
# python3.6 安装
#下载
wget http://pysvn.barrys-emacs.org/source_kits/pysvn-1.8.0.tar.gz
#安装依赖 ,若不安装依赖会有报错,见下面
yum install subversion-devel apr-devel apr-util-devel -y
#开始编译安装pysvn
tar xzf pysvn-1.8.0.tar.gz
cd pysvn-1.8.0/Source/
python3 setup.py configure
make
cd pysvn/
#查找python包的位置
find / -name site-packages
#创建pysvn文件夹
mkdir /usr/local/lib/python3.6/site-packages/pysvn
#把文件拷过去完成
cp __init__.py /usr/local/lib/python3.6/site-packages/pysvn
cp _pysvn_3_6.so /usr/local/lib/python3.6/site-packages/pysvn
报错1:运行python3 setup.py configure
报错
错误:('Error:', 'Cannot find SVN include svn_client.h - use --svn-inc-dir')
解决:yum -y install subversion-devel
报错2:运行make
报错,具体报错找不到了,反正就这个文件有错,网上也找不到什么解决办法
make: *** [IndirectPythonInterface.o] 错误 1
搜索了一下,安装成功的都是python3.6的,3.7就算成功了也是非常麻烦。。。权衡了一下,决定把python换成3.6的
果然十分顺利,安装完成,但是
报错3:import pysvn
的时候报错
[root@sonar pysvn]# python3
Python 3.6.5 (default, Apr 4 2020, 21:12:24)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysvn
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.6/site-packages/pysvn/__init__.py", line 106, in <module>
import pysvn._pysvn_3_7
ModuleNotFoundError: No module named 'pysvn._pysvn_3_7'
搜了半天也没搜到怎么回事,冥冥之中觉得是刚才安装过了,第二次安装的时候有些文件没覆盖到,重下了pysvn1.8.0安装就成功了
python3下import pysvn
,没报错就成功了
获取svn版本库里日志
Client.log(url_or_path,
revision_start=pysvn.Revision( opt_revision_kind.head ),
revision_end=pysvn.Revision( opt_revision_kind.number, 0 ),
discover_changed_paths=False,
strict_node_history=True,
limit=0,
peg_revision=pysvn.Revision(opt_revision_kind.unspecified ),
include_merged_revisions=False,
revprops=list_of_revprop_names)
各个参数:
url_or_path
svn仓库地址
revision_start
从某个版本开始取日志
revision_end
到某个版本结束
discover_changed_paths
,strict_node_history
二选一,前者表示(?),后者表示日志不会交叉复制
limit
限制返回最大日志数,0表示返回所有
peg_revision
若url_or_path不存在,则自动选择上一个存在的修订版本
include_merged_revisions
不知道
revprops
一个字符串列表,不知道干嘛用的
返回
res = {author:xxx,date:xxx,message:xxx,revision:xxx,changed_paths{path:xxx,action:xxx,copyfrom_path:xxx,copyfrom_revision:xxxx}}
其中path
是代码相对路径,action
是添加/删除/修改状态
直接输出Client.log
会得到一个空数组,要循环输出每一个值,如下
for info in log:
print(info.author,info.date,info.message,info.revision)
for e in info.changed_paths:
print(e.path)
print(e.action)
print(e.copyfrom_path)
print(e.copyfrom_revision)
根据代码路径导出代码
写法:
import pysvn
client = pysvn.Client()
file_content = client.export(svnurl, localpath)
具体参数:
revision = \
export( src_url_or_path,
dest_path,
force=False,
revision=pysvn.Revision(),
native_eol=None,
ignore_externals=False,
recurse=True,
peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
depth=depth,
ignore_keywords=False )
根据svn代码地址src_url_or_path
将文件导出到dest_path
目录下
ignore_externals=False
忽略外部参数
recurse=False
只导出单个文件,设为True
递归导出文件夹下文件,默认为True
peg_revision
指定某个版本的代码地址
depth
导出目录的深度
写了一个python脚本根据日志定时获取svn仓库代码并交给cobra扫描的功能。
还没想好放哪,再说。。。