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