`

Pysvn 程序员使用指南

 
阅读更多

源文件: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

 

分享到:
评论

相关推荐

    py39-pysvn-1.9.18.tar.gz

    PySVN是一款用于Python的Subversion库,它为Python程序员提供了便捷地与Subversion版本控制系统交互的接口。在Python3.9环境中,PySVN是进行版本控制、协同开发、代码管理的重要工具。本文将详细介绍如何在Linux系统...

    mahjongList_SVN统计_pysvn_pysvn使用_

    其中,Subversion(简称SVN)是一种广泛使用的集中式版本控制系统,而`pysvn`是Python的一个绑定库,允许开发者通过Python脚本与SVN进行交互。本文将深入探讨`pysvn`库的使用,包括如何进行SVN统计、批量修改SVN文件...

    pysvn-1.9.6.tar.gz

    而PySVN则扮演着连接Python与SVN的角色,让Python程序员能够轻松地进行版本控制操作。 PySVN 1.9.6是这个库的一个稳定版本,对于那些在macOS环境下工作的开发者来说,这是一个好消息。尽管pysvn.tigris.org已经不可...

    pysvn tool

    而PySVN则是Python语言与SVN进行交互的库,它为Python程序员提供了一套方便的接口,使得在Python程序中操作SVN变得更加便捷。本文将深入探讨PySVN工具的使用及其在实际项目中的应用。 一、PySVN简介 PySVN是一个纯...

    pysvn-1.7.0.tar.gz

    在pysvn-1.7.0这个压缩包中,包含了pysvn模块的源代码和相关文档,你可以通过阅读源代码了解其内部实现,或者查阅文档以获取更详细的使用指南和API参考。 总结来说,pysvn是Python开发者与Subversion仓库进行交互的...

    pysvn-1.9.9.tar.gz

    安装pysvn-1.9.9.tar.gz首先需要解压文件,通常可以使用tar命令完成: ```bash tar -zxvf pysvn-1.9.9.tar.gz ``` 解压后,你会得到一个名为pysvn-1.9.9的目录,其中包含了源代码和其他相关文件。在安装前,确保...

    pysvn-1.9.3.tar.gz

    《PySVN:Python与Subversion的桥梁》 PySVN,这个在“pysvn-1.9.3.tar.gz”压缩包中的模块,是Python编程语言与Subversion(SVN)版本控制系统之间的一个重要接口。Subversion,作为一种开源的版本控制系统,广泛...

    py37-pysvn-svn1106-1.9.12-2041-Win32.exe

    py37-pysvn-svn1106-1.9.12-2041-Win32.exe python pysvn工具 支持windows 32

    py25-pysvn-svn161-1.7.0-1177压缩包

    Python的pysvn模块则为Python程序员提供了一种与SVN交互的接口,使得在Python程序中可以实现版本控制操作,如检查文件状态、提交更改、更新工作副本等。对于Python 2.5的用户,这个py25-pysvn-svn161-1.7.0-1177版本...

    pysvn_64.exe

    pysvn svn工具,上传,下载资源工具 pysvn svn工具,上传,下载资源工具

    py2.5-pysvn-win32com

    综上所述,这个“py2.5-pysvn-win32com”软件包是针对Python 2.5开发者的,他们可能需要在Windows环境中使用Subversion进行版本控制,并且想要利用win32com来与Windows系统或其他COM兼容组件进行交互。通过安装这三...

    py27-pysvn-svn185-1.7.9-1572.exe

    pysvn windows安装包,对应为python2.7(32位)版本,亲测可用,pysvn官网目前无法访问

    py36-pysvn-svn1140-1.9.12-2041-Win64.rar

    《PySVN在Windows64位环境下的安装与使用指南》 PySVN是一款强大的Python库,它为Python程序员提供了一种便捷的方式来与Subversion(SVN)版本控制系统交互。这款库使得Python开发者能够轻松地执行SVN命令,如添加...

    py27-pysvn-svn1140-1.9.12-2041-Win64.exe

    pysvn windows安装包,对应为python2.7(64位)版本,直接Next,省去你编译安装的烦恼,方便实用

    PySVN for python2.5 win32

    《PySVN for Python2.5在Win32平台上的应用与解决"no module named win32com.client"错误》 PySVN是一款强大的Python库,用于与Subversion...同时,了解如何使用PySVN进行版本控制管理也是提高开发效率的重要一环。

    pysvn-1.9.10

    This site gives access to the PySVN source kits in a packager friendly way. For all other information and resources please visit the main PySVN site.

    py35-pysvn-svn194-1.9.3-1884-Win32

    pysvn,一个python使用的svn插件

    py36-pysvn-svn1140-1.9.12-2041-Win64.exe

    PySVN提供了Python语言环境下进行Subversion操作的语言支持,比官方的python语言绑定有更好的API。

    py25-pysvn-svn161-1.7.0-1177.exe

    py25-pysvn-svn161-1.7.0-1177.exe 自己网上找了一会儿,CSDN好像没搜到,共享一下。

    PySvn, 面向 python的轻量级Subversion库.zip

    PySvn, 面向 python的轻量级Subversion库 简介是一个简单的用于的Subversion库。 为了方便,我写了一个轻量级的。可以访问的库,它也可以在的PyPI中使用。 它与 python 2.7和 3.3 兼容。这个库包装了svn客户端,因此...

Global site tag (gtag.js) - Google Analytics