Pysvn 程序员使用指南_iteye_10850的博客-程序员资料

技术标签: python  操作系统  Python相关  

源文件:http://ju.outofmemory.cn/entry/35762

这是一篇关于pysvn模块的指南.

完整和详细的API请参考 http://pysvn.tigris.org/docs/pysvn_prog_ref.html.

pysvn是操作Subversion版本控制的Python接口模块. 这个API接口可以管理一个工作副本, 查询档案库, 和同步两个.

该API不能创建新的仓库; 只能作用在现有仓库上. 如果你需要创建一个仓库, 请使用Subversion的svnadmin命令.

使用这个API, 你可以check out一份工作拷贝, 添加, 编辑, 和删除工作文件, 和check in, 比较, 或者放弃更改. 仓库属性, 如关键字扩展, 行字符结束, 或者忽略的列表也可以检查和控制.

Subversion 模型

Subversion是一个更新-编辑-提交的模型. 首先在本地建立一个工作副本. 在工作副本上进行修改, 最后提交到中央仓库 (可以是本地或者远程).

这个模型允许多人偶尔会同时修改同一个文件. 大多情况下. Subversion不会干预合并这些不同修改, 如果一个提交失败, 用户或者应用则要重新检查和修改然后再次提交.

常见任务

本节给出一些使用pysvn接口的常用例子. 业务可以会递归的处理目录. 添加参数recurse=False以防止这种行为; 例如, 你可以需要添加内容没有增加一个目录.

check out一份工作副本

 

import pysvn
client = pysvn.Client()#check out the current version of the pysvn project
client.checkout('http://localhost/example/trunk','./examples/pysvn')#check out revision 11 of the pysvn project
client.checkout('http://localhost/example/trunk','./examples/pysvn-11',
   revision=pysvn.Revision(pysvn.opt_revision_kind.number,11))
 

 

这是一个建立example测试项目的例子,目录是examples/pysvn. 这个项目是用在剩下的例子.

添加一个文件或者目录到仓库

import pysvn
# write a file foo.txt
f = file('./examples/pysvn/foo.txt','w')
f.write('Sample versioned file via pithon\n')
f.close()
client = pysvn.Client()#schedule the addition;#  the working copy will now track the file as a scheduled change
client.add('./examples/pysvn/foo.txt')#committing the change actually adds the file to the repository
client.checkin(['./examples/pysvn/foo.txt'],'Adding a sample file')

 

这个例子是在工作副本中创建了'foo.txt'文件, 然后添加到仓库. 请注意Client.import_()命令会同时增加和提交. 大多数应用, 会在许多修改后再提交.

更新工作副本

import pysvn
client = pysvn.Client()
client.update('./examples/pysvn')

 

从仓库中更新其他用户修改并保存到本地副本. 大多数应用应该经常这样做以防止冲突.

提交更新到仓库

import pysvn
# edit the file foo.txt
f = open('./examples/pysvn/foo.txt','w')
f.write('Sample versioned file via python\n')
f.close()# checkin the change with a log message
client = pysvn.Client()
client.checkin(['./examples/pysvn'],'Corrected spelling of python in foo.txt')

提交到Subversion是原子的. 要么所有修改都成功提交, 要么提交失败. 大部分应用会提交工作副本所有修改, 如本例所示, 或者通过个别文件或者目录, 但必须是同一单位.

放弃工作副本修改

import pysvn
# edit the file foo.txt
f = file('./examples/pysvn/foo.txt','w')
f.write('This change will never be seen\n')
f.close()#discard the edits
client = pysvn.Client()
client.revert('./examples/pysvn/foo.txt')

这丢弃在工作拷贝和恢复的文件或目录的任何未提交的未经编辑的状态变化.

正在计划增加或移除留无版本或恢复到工作拷贝.

重命名或者移动文件

import pysvn
client = pysvn.Client()#rename the file client side
client.move('./examples/pysvn/foo.txt','./examples/pysvn/foo2.txt')#checkin the change removes the file from the repository
client.checkin(['./examples/pysvn/foo.txt','./examples/pysvn/foo2.txt'],'Foo has become Foo2')

移动或重命名文件删除旧路径或名称的文件, 并增加了在新的位置, 同时保留以前的版本有关的信息.

在这个例子里, 我们通过文件名Client.checkin()传递父目录也将是有效的.

转移和合并可以在服务器端单步完成; 可以参见仓库任务的那节例子.

从仓库中删除文件或目录

import pysvn
client = pysvn.Client()#schedule the removal;#  the file will be removed from the working copy
client.remove('./examples/pysvn/foo2.txt')#committing the change removes the file from the repository
client.checkin(['./examples/pysvn/foo2.txt'],'Removing sample file')

有些人把删除的文件, 或是用完全清除存储库目录. 该文件仍然存在于以前的版本, 可以通过检查或以其他方式进行审查以前修订的内容检索.

确定等待变动

import pysvn
client = pysvn.Client()
changes = client.status('./examples/pysvn')print'files to be added:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.added]print'files to be removed:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.deleted]print'files that have changed:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.modified]print'files with merge conflicts:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.conflicted]print'unversioned files:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.unversioned]

生成差异或补丁

import pysvn
client = pysvn.Client()
diff_text = client.diff('./tmp-file-prefix-','.')

获取仓库URL

import pysvn
client = pysvn.Client()
entry = client.info('.')print'Url:',entry.url

仓库任务

本节说明任务的例子, 操纵或检查仓库.虽然共同任务, 通过本地工作副本时间的变化, 这些任务直接影响到库 获取仓库目录的清单

import pysvn
client = pysvn.Client()
entry_list = client.ls('.')

从仓库获取文件内容

import pysvn
client = pysvn.Client()
file_content = client.cat('file.txt')

创建一个标记或分支

import pysvn
client = pysvn.Client()
log_message ="reason for change"def get_log_message():returnTrue, log_message
client.callback_get_log_message = get_log_message
client.copy('http://svnrepo.com/svn/trunk','http://svnrepo.com/svn/tag/%s'% tag_name )

从仓库中转移或者重命名

import pysvn
client = pysvn.Client()
client.move('file_old.txt','file_new.txt')

锁定文件

import pysvn
client = pysvn.Client()
client.lock('file.txt','reason for locking')

锁定文件并锁定其他用户或者工作副本

import pysvn
client = pysvn.Client()
client.lock('file.txt','reason for locking', force=True)

解锁

import pysvn
client = pysvn.Client()
client.unlock('file.txt')

解锁文件并锁定其他用户或工作副本

import pysvn
client = pysvn.Client()
client.unlock('file.txt', force=True)

测试锁定文件

Method 1:

all_entries =self.client.info2( path, recurse=False)for path, info in all_entries:if info['lock']:if info['lock']['token']!='':print'%s is locked'% path
        print info['lock']['comment']

Method 2:

all_status =self.client.status( path, recurse=False, update=True)for status in all_status:if status.entry isnotNone:if status.entry.lock_token isnotNone:print'%s is locked'% status.path

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_10850/article/details/82617872

智能推荐

Python绘图之Matplotlib_Zhang Hongbo2019的博客-程序员资料

Python绘图之Matplotlib转载微信公众号,链接:https://mp.weixin.qq.com/s/b8IAf-liXvgn50-3HwT1VAMatplotlib是Pyhton中最基本的可视化工具,官网地址:https://matplotlib.org/认识绘图绘图的基本操作常见图形的绘制1、认识绘图绘图之前,要调用其库import matplotlib...

Sphinx学习之sphinx的安装篇_weixin_34187862的博客-程序员资料

Sphinx学习之sphinx的安装篇一、 Sphinx简介Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特...

Scala安装和开发环境配置教程_scala安装及环境配置_smileNicky的博客-程序员资料

Scala语言概述:Scala语言是一门以Java虚拟机为运行环境,支持面向对象和函数式编程的静态语言,java语言是面向对象的,所以代码写起来就会相对比较模块儿,而函数式编程语言相对比较简洁

Scala基础知识(个人总结)_hellosrc | remake的博客-程序员资料

    声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章              2. 由于是个人总结, 所以用最精简的话语来写文章           

rosdep init与update报错解决(一定成功的方法)_叫我李先生的博客-程序员资料

安装ROS安装的是kinetic(Ubuntu16.04),可以参考官方教程http://wiki.ros.org/kinetic/Installation/Ubuntu, 网上也有不错的中文安装版,比官网讲的更详细一点——ROS不能再详细的安装教程https://www.cnblogs.com/liu-fa/p/5779206.html.其中,最容易出问题大概都是这两步.原因大概都是因为...

如何处理svhn数据集的mat文件_keevinzha的博客-程序员资料

处理svhn数据集的mat文件导语碰到的问题scipy和h5pymat文件的结构参考文档导语最近训练crnn需要使用svhn数据集,下载地址在这里,压缩包里包含一堆png格式的图片,一个.mat文件和一个.m文件,图片的label和bbox就在.mat文件中。碰到的问题scipy和h5pymat格式的文件是matlab的数据保存标准格式。根据网上的教程,我首先用scipy库处理mat文件...

随便推点

uni-app 引入**vant,colorUI,uView等并发布H5端_基于uni-app和colorui开发h5初始模板_某人的小猫的博客-程序员资料

以下以vant为例,发布H5轻量、可靠的移动端 Vue 组件库,采用 MIT 开源协议, 目前github star 数9k+,是有赞的一套开源组件库。通过 Vant,可以快速搭建出风格统一的页面,提升开发效率。目前已有近 60+ 个组件,这些组件被广泛使用于有赞的各个移动端业务中 此段搬的官网语句#如何引入呢?一:官方推荐了几种方法 ,具体写法就不复述了 引入方法本人用的是 npm 方式# Vue 2 项目,安装 Vant 2: npm i vant -S Vue 3 项目,安装 Van

Android应用--简、美音乐播放器原型放送(作者:小巫)_androidmp3action_IT_xiao小巫的博客-程序员资料

Android应用--简、美音乐播放器原型放送2013年7月5日简、美音乐播放器开发前言:小巫的简、美音乐播放器从5月7号开始开发,之前以为时间很充足,也没有估量整个软件的需求,如果简单实现基本的操作的话,确实可以在一个星期内把一个简单的音乐播放器给开发出来。不过我增加了很多特性,比如歌词的显示,专辑封面的显示,界面的左右切换,倒影效果实现等,让整个音乐播放器添色很多,

Python爬虫实例(二)爬取数据后并入excel_穆鸽子的迷弟的博客-程序员资料

报错:Module Not Found Error: No module named 'openpyxl'则下载openpyxl模块,pip install openpyxl源码:import requestsfrom lxml import etreeimport pandas as pd#设置请求头headers = { 'User-Agent':'Mozilla...

Vertus Fluid Mask V3.3.18 for mac汉化版|抠图滤镜Vertus Fluid Mask中文_fluid mask mac_ftzylt的博客-程序员资料

Vertus Fluid Mask for mac汉化版修正独立版和滤镜版不能在中文版系统运行的问题支持:PSCS5–PSCC2019支持:独立版支持macOS High Sierra10.10-10.14WIN系统汉化版这里下载→http://feitianwu7.com/thread-116075-1-1.htmlvertus fluid mask是一款功能强大的ps抠图软件,...

html中制作精美的展示列表(基于bootstrap,内含代码链接)_html 精美列表_钱彬 (Qian Bin)的博客-程序员资料

在网站建设中,往往需要以列表的形式展示一些招聘信息。尽管Bootstrap提供了不少扁平式的列表样式,但是在美观性上面还有待二次开发。下面讲解如何制作一款比较精美的展示列表,效果图如下:下面进入具体的开发。1. html编写代码如下:<!DOCTYPE html><html lang="zh-CN"> <head> <m...

awesome-algorithms 算法_awesome算法_shelleyHLX的博客-程序员资料

Awesome AlgorithmsA curated list of awesome places to learn and/or practice algorithms. Inspired by awesome-awesomeness and all the other awesome Awesome libraries.If you want to contribute, pleas...

推荐文章

热门文章

相关标签