SVN簡易使用手冊

2021-09-30 05:36:26 字數 3631 閱讀 7842

svn簡易使用手冊

svn是一種類似於cvs的版本控制軟體,它的操作方法也與cvs類似,但是它彌補了cvs的很多不足和做了很大的改善和提高。在這個手冊中,主要描述的是它的客戶端的使用方法,至於伺服器的配置,在另一篇手冊中說明。

svn中的修訂版本號

當新建乙個版本庫時,它的修訂版本號為0,每當執行一次提交命令時,它的修訂版本號就增加1,svn也用一些關鍵字表示某一些版本:

head:版本庫中最新的版本

base:工作拷貝中乙個條目的修訂版本號,如果該版本在本地修改了,則「base版本」就是這個條目在本地未修改的版本。

committed:在base版本之前(或者base)乙個專案最後修改的版本。

prev:乙個專案最後修改版本之前的那個版本。

svn命令

svn的命令格式為 svn command [options]

其中command是svn要執行的命令,簽出,提交,更新等。主要的命令及命令格式如下:

checkout

checkout可以簡寫為co。它是從版本庫中將檔案(夾)簽出到工作目錄中。命令格式如下:

svn co url[@rev] [path]

url是版本庫的位址,rev是要簽出的版本號。path指定工作目錄,如果不指定則是當前目錄。

commit

將本地修改(包括檔案內容修改,新增刪除檔案,資料夾等)提交到svn版本庫中。其命令格式主要如下:

svn commit -m」message」 [path]

-m是必須的,它後面接著的是日誌的內容message,message可以為空。但是強烈建議大家新增日誌內容,描述本次提交的目的和修改的範圍。path指定要提交的目錄,以遞迴的方式提交該目錄下的子目錄和檔案。如果不指定path,則預設是當前目錄。

注意:在commit之前,一定要使用一次update命令(下面介紹),並且再測試,無檢測出bug之後才提交,避免版本庫中的**充滿bug。(為什麼要執行update以及執行它之後可能出現的情況請看本文件結尾)

svn update [path]

選項path的作用和commit中path的作用一樣。

update時候,在執行結果中會列出結果,其結果如下所示

[status] [filename]

status包括a(新增檔案),d(刪除檔案),r(替換檔案),u(更新檔案),c(版本庫與本地檔案衝突,無法合併),g(版本庫中的檔案與本地檔案合併),filename是發生發生了上述改變的檔案的檔名。發生衝突的解決方法請看本文件結尾)

status

顯示本地檔案的狀態。其命令格式如下:

svn status [path]

選項path和commit中的選項path一樣。

status執行的結果由若干列組成,列與列有空格分開,狀態很多,在這裡不詳細說,其中第一列的狀態包括a,d,r,u,c,m,請參考update命令,還有"?",表示該檔案沒有被版本化,請使用add命令將其加進版本庫中,"!"表示檔案丟失,比如不使用svn命令delete而刪除了檔案。其它狀態不在這裡描述。

add新增檔案(夾)到版本庫中,它是做乙個標誌,在commit才會真正新增進去。它的命令格式如下:

svn add path

path是指定要新增的檔案或者目錄

delete

刪除檔案(夾)。同add命令的一樣,它也是先做乙個標誌,在commit時才改變版本庫。命令格式如下:

svn delete path

path選項同add

diff

diff命令用於比較檔案的差別。其主要的命令格式如下

svn diff [filename]

filename是要比較的檔案路徑,如果它是乙個目錄的話,則會比較該目錄下面所有的檔案。不指定path則預設為當前目錄。diff也可以指定要比較的檔案的版本號,在這裡不詳細描述。這個簡單的命令格式比較的是檔案的當前狀態和它被簽出或被更新時候的狀態,它並不自動比較當前檔案和版本庫中最新版本的檔案的差別,它顯示的是該檔案被更新後被修改的情況。

svn revert filename

filename同diff中的filename。它不能省略。

resolved

刪除檔案衝突的標誌。在執行update的時候,有可能檔案被標誌為衝突(c),使用這個命令可以去除這個標誌,但是它並不能解決衝突。解決衝突的問題由開發人員協商解決。其命令格式如下:

svn resolved filename

filename指定檔名

commit前執行update的原因

當從版本庫簽出源**到工作目錄後,所有的編輯,修改都是改變工作目錄中的內容,而不是實時的反映到版本庫中,知道commit才會修改版本庫。在多人協同開發的環境下,往往在自己進行修改源**的時候,別人已經commit了導致版本庫內容改變,這個時候,工作目錄中的檔案都已經「過時」了,如果將這些「過時」的**提交到版本庫中,會產生意想不到的結果。舉例說,版本庫中有檔案a.h,a.c,並且巨集max在a.h中定義,在a.c中用到。開發人員peter和amy。如果peter修改了a.h,刪除了巨集max,再提交到版本庫中,而此時,amy仍然修改著a.c,當他修改完並且直接提交後,版本庫中的檔案情況如下a.h(由peter修改),a.c(由amy修改),這時的**,a.c所使用的max在a.h中無定義了。乙個bug被無意中引入!因此在執行commit前一定要執行一遍update,否則版本庫會變得很混亂。

衝突的產生

多人協同開發的情況下,多個人同時修改同乙個檔案的情況是很常見的。他們從版本庫中簽出同樣乙份源**。如果他們修改了同樣乙個檔案的話,svn會嘗試將這些修改合併,如果合併成功,則標誌為合併(g,請參考update命令),如果svn無法將這些修改合併,就會設定衝突標誌(c,請參考update命令)。主要體現在不同的人對同一份檔案的同乙個地方做出了不同的修改(比如修改第10行的文字),svn不能也不應該決定應該選擇哪份修改而丟棄另一分修改,因此,它標誌檔案為衝突,由開發人員進行協商解決。

解決衝突的方法

衝突發生時,svn會放置三個未版本化的檔案到工作目錄中:

filename.mine: 文更新前的被修改的檔案

filename.roldrev: 更新前檔案的base版本

filename.rnewrev: 檔案在版本庫中的最新版本

發生衝突時,需要開發人員之間協商來決定使用哪一部份的**。再執行resolved命令將衝突標誌去除,resolved命令也將上述新建的檔案刪除。

在發生衝突的檔案中,svn會新增額外的標誌標識衝突的地方,比如filename發生衝突,那麼filename變成如下形式:

lettuce

tomato

<<<<<<< .mine

salami

mortadella

sauerkraut

prosciutto

>>>>>> .r2

creole mustard

bottom piece of

其中的小於號,等於號,大於號是svn新增的衝突標記。它表示:

小於號和等於號之間是你當前工作目錄中所修改檔案的內容,等於號和大於號之間的部分是版本庫中檔案的內容,其它部分是它們之間相同的部分。

參考文獻

[1] ben collins-sussman, brian w. fitzpatrick, c. michael pilato, 使用subversion進行版本控制—針對subversion 1.2

[2] svn --help

libSVM簡易使用手冊

最近在學svm,尤其關注用svm解決分類問題。本篇博文把學到的知識總結下來,希望對大家有所幫助。關於svm的基礎理論知識,可以google這篇文章 svm的八股簡介 講解得生動有趣,是入門的極好教材。作為拿來主義者,我更關心怎麼用svm,因此瞄上了台灣林智仁教授提供的libsvm。我把自己的使用過程...

CVS使用手冊

注意 第一次匯出以後,就不是通過cvs checkout來同步檔案了,而是要進入剛才cvs checkout project name匯出的project name目錄下進行具體檔案的版本同步 新增,修改,刪除 操作。cvs的許可權管理分2種策略 基於系統檔案許可權的系統使用者管理 適合多個在lin...

sed使用手冊

原貼 http blog.chinaunix.net u 23204 showart 305602.html sed使用手冊 原創 在sed語句,正規表示式必須封閉在 中間。如 d,刪除空行。sed位址 在sed位址管理中,預設是對全域性進行操作,同時位址可以分為行位址和模式位址。如1,10d 12...