SVN 命令行的使用
阿新 • • 發佈:2018-05-12
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 命令行的使用