1. 程式人生 > >SVN 命令行的使用

SVN 命令行的使用

visio 用戶 bar 臨時 new 機會 working har AI

大多數時候我們用TortoiseSVN作為客戶端,其實SVN提供了強大的客戶端命令行工具,和Git差不不多。

1. 查看工作副本修改的整體狀況。
$ svn status
?       scratch.c
A       stuff/loot
A       stuff/loot/new.c
D       stuff/old.c
M       bar.c
$

?表示沒有加入版本控制,A,D,M分別表示增加,刪除,修改。

svn status 支持選項 --verbose (-v), 帶上該選項後, 命令會輸出當前目錄中每一項的 狀態, 即使是未被修改的項目:

$ svn status -v
M               44        23    sally     README
                44        30    sally     INSTALL
M               44        20    harry     bar.c
                44        18    ira       stuff
                44        35    harry     stuff/trout.c
D               44        19    ira       stuff/fish.c
                44        21    sally     stuff/things
A                0         ?     ?        stuff/things/bloo.h
                44        36    harry     stuff/things/gloo.c

可以給 svn status 帶上選項 --show-updates (-u), 這樣 Subversion 就會和倉庫通信, 輸出工作副本中已過時的項目:

$ svn status -u -v
M      *        44        23    sally     README
M               44        20    harry     bar.c
       *        44        35    harry     stuff/trout.c
D               44        19    ira       stuff/fish.c
A                0         ?     ?        stuff/things/bloo.h
Status against revision:   46

Status against revision: 46*表示遠程倉庫的文件已經發生修改,如果合並會可能發生沖突。

2. 撤銷工作副本的修改
$ svn revert 2.txt
已恢復“2.txt”

  svn revert 提供了一個很好的補救機會, 否則的話, 用戶就得花費大量的時間, 自己一點一點地手工撤消修改, 又或 者采用一個更麻煩的做法, 直接刪除工作副本, 然後重新從服務器上檢出一個 幹凈的工作副本.

3. 解決沖突
3.1 手動解決沖突

首先看一下發生沖突後的文件內容:

$ cat sandwich.txt
Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard
Bottom piece of bread

 分別由小於號, 等號和大於號組成的行是沖突標記, 它們不是沖突數據 的一部分, 用戶通常只需要確保在提交前把它們都刪除掉即可. 前兩個標記之 間的文本是用戶的本地修改.

<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======

  後兩個標記之間的內容是別人提交的修改:

=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2

  這裏去掉別人提交的內容

Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
Salami
Mortadella
Prosciutto
Creole Mustard
Bottom piece of bread

  使用命令 svn resolve 移除文件的沖突狀態後, 接下來就可以提交修改了:

$ svn resolve --accept working sandwich.txt
Resolved conflicted state of ‘sandwich.txt‘
$ svn commit -m "Go ahead and use my sandwich, discarding Sally‘s edits."

  --accept=working 告訴 Subversion 把文件的當前內容作為沖突解決後的狀態,svn resolve 會刪除目錄下的三個臨時文件, 將用戶指定的 文件版本作為沖突解決後的最終版。

3.2 全丟棄自己的修改
svn resolve --accept theirs-full CONFLICTED-PATH 
3.3 丟棄當前的所有修改
$ svn revert  filename

  



SVN 命令行的使用