溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Pysvn如何使用

發(fā)布時間:2023-02-25 14:11:11 來源:億速云 閱讀:134 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“Pysvn如何使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Pysvn如何使用”吧!

pysvn是操作Subversion版本控制的Python接口模塊. 這個API接口可以管理一個工作副本, 查詢檔案庫, 和同步兩個.

該API不能創(chuàng)建新的倉庫; 只能作用在現(xiàn)有倉庫上. 如果你需要創(chuàng)建一個倉庫, 請使用Subversion的svnadmin命令.

使用這個API, 你可以check out一份工作拷貝, 添加, 編輯, 和刪除工作文件, 和check in, 比較, 或者放棄更改. 倉庫屬性, 如關(guān)鍵字?jǐn)U展, 行字符結(jié)束, 或者忽略的列表也可以檢查和控制.

Subversion 模型

Subversion是一個更新-編輯-提交的模型. 首先在本地建立一個工作副本. 在工作副本上進行修改, 最后提交到中央倉庫 (可以是本地或者遠(yuǎn)程).

這個模型允許多人偶爾會同時修改同一個文件. 大多情況下. Subversion不會干預(yù)合并這些不同修改, 如果一個提交失敗, 用戶或者應(yīng)用則要重新檢查和修改然后再次提交.

常見任務(wù)

本節(jié)給出一些使用pysvn接口的常用例子. 業(yè)務(wù)可以會遞歸的處理目錄. 添加參數(shù)recurse=False以防止這種行為; 例如, 你可以需要添加內(nèi)容沒有增加一個目錄.

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')

這個例子是在工作副本中創(chuàng)建了'foo.txt'文件, 然后添加到倉庫. 請注意Client.import_()命令會同時增加和提交. 大多數(shù)應(yīng)用, 會在許多修改后再提交.

更新工作副本

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

從倉庫中更新其他用戶修改并保存到本地副本. 大多數(shù)應(yīng)用應(yīng)該經(jīng)常這樣做以防止沖突.

提交更新到倉庫

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是原子的. 要么所有修改都成功提交, 要么提交失敗. 大部分應(yīng)用會提交工作副本所有修改, 如本例所示, 或者通過個別文件或者目錄, 但必須是同一單位.

放棄工作副本修改

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')

這丟棄在工作拷貝和恢復(fù)的文件或目錄的任何未提交的未經(jīng)編輯的狀態(tài)變化.

正在計劃增加或移除留無版本或恢復(fù)到工作拷貝.

重命名或者移動文件

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')

移動或重命名文件刪除舊路徑或名稱的文件, 并增加了在新的位置, 同時保留以前的版本有關(guān)的信息.

在這個例子里, 我們通過文件名Client.checkin()傳遞父目錄也將是有效的.

轉(zhuǎn)移和合并可以在服務(wù)器端單步完成; 可以參見倉庫任務(wù)的那節(jié)例子.

從倉庫中刪除文件或目錄

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')

有些人把刪除的文件, 或是用完全清除存儲庫目錄. 該文件仍然存在于以前的版本, 可以通過檢查或以其他方式進行審查以前修訂的內(nèi)容檢索.

確定等待變動

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

倉庫任務(wù)

本節(jié)說明任務(wù)的例子, 操縱或檢查倉庫.雖然共同任務(wù), 通過本地工作副本時間的變化, 這些任務(wù)直接影響到庫
獲取倉庫目錄的清單

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

從倉庫獲取文件內(nèi)容

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

創(chuàng)建一個標(biāo)記或分支

import pysvn
client = pysvn.Client()
log_message = "reason for change"
def get_log_message():
    return True, 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 )

從倉庫中轉(zhuǎn)移或者重命名

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 is not None:
        if status.entry.lock_token is not None:
            print '%s is locked' % status.path

感謝各位的閱讀,以上就是“Pysvn如何使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Pysvn如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI