svn中的revert和update
今天有人問到revert和update的問題。
剛開始還真被問住了。
因為感覺revert和update都可以將本地的copy更新到以前的一個版本,會有什么不同呢?
查了些資料,並做了個試驗,終於發現了它們的不同。
假設當前最新的版本是6,但是,最新的一次提交不是你想要的,也就是想把版本為6的修改干掉
下面來看看如何分辨用revert和update來實現。
1、使用revert
保證本地copy為最新版本,即版本6.
將本地copy revert到版本5.
將本地copy commit。
2、使用update
將本地copy update到版本5.
這個時候是沒辦法直接提交的,因為你的修改不是在最新的版本(6)上進行的。
需要把版本5做個備份,然后check out版本6.
通過文件比較工具將版本6的本地copy修改為與版本5的本地copy一致。
然后將版本6的本地copy提交。
可見,revert與update的本質區別是,
revert是在本地copy原來版本的基礎上進行的修改,若原來本地copy的版本為最新,可以直接commit;
update只是將本地copy更新到一個指定的版本,若更新到的不是最新版本,不能進行commit。
可見revert就是回退修改,但版本保持不變;update是將本地copy更新到一個指定的版本。
看看幫助文檔中的說明。
[revert]
revert: Restore pristine working copy file (undo most local edits).
usage: revert PATH...
Note: this subcommand does not require network access, and resolves
any conflicted states. However, it does not restore removed directories.
[update]
update (up): Bring changes from the repository into the working copy.
usage: update [PATH...]
If no revision is given, bring working copy up-to-date with HEAD rev.
Else synchronize working copy to revision given by -r.
For each updated item a line will start with a character reporting the
action taken. These characters have the following meaning:
A Added
D Deleted
U Updated
C Conflict
G Merged
E Existed
A character in the first column signifies an update to the actual file,
while updates to the file's properties are shown in the second column.
A 'B' in the third column signifies that the lock for the file has
been broken or stolen.
If --force is used, unversioned obstructing paths in the working
copy do not automatically cause a failure if the update attempts to
add the same path. If the obstructing path is the same type (file
or directory) as the corresponding path in the repository it becomes
versioned but its contents are left 'as-is' in the working copy.
This means that an obstructing directory's unversioned children may
also obstruct and become versioned. For files, any content differences
between the obstruction and the repository are treated like a local
modification to the working copy. All properties from the repository
are applied to the obstructing path. Obstructing paths are reported
in the first column with code 'E'.
Use the --set-depth option to set a new working copy depth on the
targets of this operation.