svn merge 回滾

聊一聊 svn merge 命令。

svn 是啥就不用介紹了吧,誰用誰知道。有了 svn,開發者只要把代碼提交上去,無論山崩地裂、電腦進水、硬盤格式化,哪怕換了一臺電腦,都能隨時把代碼找回來。不過從自己工作中看到的現象來說,可能還有很多人并不了解 svn 真正的便捷之處。這里我們就聊一聊代碼合并、回滾必備的利器——svn merge 命令。

一說到回滾,可能很多人立馬先想到了 svn revert。其實非也,svn revert 只能把未提交的本地修改撤銷,對于已經提交的代碼就無能為力了。要把已經提交上去的代碼回滾掉,非 svn merge 莫屬。

PS:我們這里以 Linux shell 下的 svn 命令行工具為例進行介紹。Windows 圖形界面版本其實原理一樣,只是把命令轉移到 GUI 里面去了。


?

在 shell 里輸入 svn help merge ,可以看到大片的幫助文檔,新手看了真是無從下手。不急,且看為首的幾行:

merge: Apply the differences between two sources to a working copy path.
usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

其實只要看明白這 4 行,svn merge 命令就搞定了。

svn merge 能干啥?

我們都知道,svn 上面保存了一份代碼的所有歷史版本。隨著開發過程中不短提交新的代碼,版本只會越來越多,而已存在的版本又無法刪除。所以,如果某個版本的代碼提交錯了、不想要了怎么辦?

這種情況,其實只要把最后一次提交里,新增的代碼刪掉、刪掉的代碼加回來、修改的代碼改回去,然后 svn ci 一下就好。雖然這樣好像又多了一個版本,但其實代碼是回到前面一個版本的狀態了。

而要把新增的代碼刪掉、刪掉的代碼加回來、修改的代碼改回去,手工修改無疑太笨,也太容易出錯。這就輪到 svn merge 命令出場了。

merge: Apply the differences between two sources to a working copy path.

help 文檔告訴我們,merge 就是把兩套代碼之間的 diff 生效到本地的一個路徑上。

比如上面的例子,我們假設有一套代碼維護在 svn 上,一開始的版本號是 r1,后來提交了一次版本就是 r2,然后發現 r2 寫錯了、想撤銷這次修改。這次修改做的變化就是 r1 -> r2 兩個版本的 diff;那么想撤銷修改,只要把 r2 -> r1 的 diff 再提交上去,雖然生成了新的版本號 r3,但其實 r3 里的代碼跟 r1 是完全一樣的。

svn merge 怎么用?

說了這么多虛的,那怎么操作呢?我們繼續跟著 help 往下看。

1. 在同一個 URL 上做 merge

3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

前面的例子其實是第 3 種用法,我們先看這個。假設 shell 里面當前路徑就對應著 svn 上代碼最上層目錄,要實現上面的例子,可以直接這么寫:

svn merge -r r2:r1 .

注意結尾有個“.”,表示將 diff 生效到當前路徑。然后提交代碼即可。

svn ci -m "rollback r2 -> r1"

2. 在不同的 URL 上做 merge

前面的例子要求遠程代碼 URL 跟本地代碼對應的 URL 必須一致,即都在 trunk 上,或者都在同一個 branch 或者 tag 上。一般情況需要回滾代碼、撤銷某次修改,上面的命令足矣。而如果涉及到多個 branch 合并到 trunk 之類的問題,還需要繼續往下看 :)

?


To be continued ...

(有時間再接著寫)

?

轉載于:https://www.cnblogs.com/jiangzhaowei/p/5671484.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256815.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256815.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256815.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用視覺信息,為什么能把移動機器人的空間位置信息記錄下來

1、首先由相機的世界坐標系,物體的世界坐標-》相機坐標-》到投影面坐標-》到像素坐標; 最終一個世界中物體的三維點被記錄在相機的一個轉化的坐標系中;當同時拿到很多的物體坐標時候,此時相機中就擁有了該 整個觀察到物體的坐標…

大三實驗室 經驗總結

1.高電壓采樣時,需要將多個電阻串聯起來而不能使用一個等效的大電阻,因為同樣封裝下,一個電阻阻值太大能承受的電流就會比較小 PI*I*R。 2.單片機,DSP,FPGA的純輸出功能IO口,都應該加上74HC04非門作為硬件防火墻&#…

Spring4 MVC文件下載實例

這篇文章將向您展示如何使用Spring MVC4執行文件下載,我們將看到應用程序從文件系統內部以及外部文件下載文件。本教程的主要亮點: 下載文件是相當簡單的,涉及以下步驟。 創建一個InputStream到文件用于下載。查找MIME類型下載文件的內容。–…

學習筆記(54):Python實戰編程-Scale

立即學習:https://edu.csdn.net/course/play/19711/343117?utm_sourceblogtoedu 1.滑塊組件Scale: 用于定義一定范圍的區間,如音量大小的調整就是滑塊組件,這里是以滑動滑塊來改變標簽文字的大小為例進行說明的 2.知識點: 1)滑…

不可不知的:iOS開發的22個詭異技巧

結合自身的實踐開發經驗總結出了22個iOS開發的小技巧,以非常歡樂的語調輕松解決開發過程中所遇到的各種苦逼難題,光讀著便已忍俊不禁。 1. TableView不顯示沒內容的Cell怎么辦? 類似于圖1,我不想讓下面的那些空顯示。很簡單&#…

linux刪除之前的文件日志

linux下每天都在產生LOG日志文件,如果不定期刪除,遲早擠爆硬盤,如果手動刪除,幾次可以,不是長久之計。這些事交給Linux系統就可以解決。 試驗環境: 系統:CentOS 6.5 x64 測試路徑、測試文件名、…

線程操作范例

實例要求: 設計一個線程操作類,要求可以產生三個線程對象,并可以分別設置三個線程的休眠時間。如下所示: 問怎么設計? 分析 從之前學習知道,線程的實現有兩種方式,一種是繼承Thread類&#xff0…

學習筆記(55):Python實戰編程-Scrollbar

立即學習:https://edu.csdn.net/course/play/19711/343118?utm_sourceblogtoedu 1.滾動條ScrollBar: 當列表內容項的內容過多時,就需要使用到這個滾動條來進行拖動顯示更多的其他選項;一般滾動條是和listbox配對使用的 2.注意事項&#xff…

【轉】Unity3D研究院之使用Xamarin Studio調試Unity程序

如果你是在windows上開發,就無視這篇文章吧。 為什么要用Xamarin Studio 你可以看看我之前的文章 http://www.xuanyusong.com/archives/2683 unity4.x 和 unity5.x都可以用Xamarin Studio 來調試,親測! 先下載插件:http://files.u…

配置SMB共享 、 配置NFS共享

虛擬機,均要檢測1. Yum是否可用2. 防火墻默認區域修改為trusted3. IP地址是否配置########################################################################################################### samba 文件共享(共享文件夾) Samba 軟件…

stdout標準輸出、stderr標準錯誤輸出 標準輸入、標準輸出、標準錯誤輸出分別被定義為0、1、2。

$ make > compile.log 2>&1 首先將標準錯誤輸出也重定向到標準輸出中,再將標準輸出重定向到 compile.log 這個文件中。這樣我們就可以將所有的輸出都存儲到文件中了。

centos7 和centos 6的一些區別

平時的我們基本都用CentOS 6 。但是偶爾遇到的就記錄下來了,與大家分享。防火墻[CentOS 6] iptables[CentOS 7] firewalld在7中開啟80端口 firewall-cmd --zonepublic --add-port80/tcp --permanent #出現success表明添加成功復制代碼命令含義&#xff1a…

systemverilog 起步

轉一篇Systemverilog的一個牛人總結: http://blog.sina.com.cn/s/blog_5e9b181a010188re.html 1、合并數組和非合并數組 1)合并數組: 存儲方式是連續的,中間沒有閑置空間。 例如,32bit的寄存器,可以看成是4…

學習筆記(56):Python實戰編程-Menu

立即學習:https://edu.csdn.net/course/play/19711/343119?utm_sourceblogtoedu 1.菜單menu: 1)彈出式菜單,類似與電腦桌面右擊彈出的菜單成為彈出菜單; 2)窗體式菜單:類似于word上面的菜單欄 2.窗體菜單創建的步驟…

SystemCenter2012SP1實踐(19)集成WSUS更新服務器2012

今天我們的任務是配置一臺WSUS(Windows更新服務器),以方便后期通過"基線"與其組合,完成虛擬機的系統補丁升級。WSUS是Windows系統運維自動化的一個重要組成部分,通過它,能夠節省我們很多的運維時…

像元尺寸計算

像元尺寸 X 總像素大小 感光芯片尺寸(圖像區域大小)

win7右鍵點擊文件夾進入命令窗口方法

方法一:按住shift鍵,鼠標右擊,會出現"在此處打開命令窗口";方法二:修改注冊表,為鼠標右鍵添加打開命令行功能;(1)將下列內容賦值到記事本中,并保存為.reg文件。Windows Re…

教你學會Linux/Unix下的vi文本編輯器

vi編輯器是Unix/Linux系統管理員必須學會使用的編輯器。看了不少關于vi的資料,終于得到這個總結。首先,記住vi編輯器的兩個模式:1、命令模式2、編輯模式。在一個UNIX/Linux的shell命令或者一個以斜杠(/)、問號&#xf…

C++函數返回引用的含義

引用的意思就是說返回變量的地址而非變量本身。這樣子函double數結束之后存儲返回值的內存單元不會被銷毀,保留了它的地址。 例如下面這個例子: int a1,b; ba; b; 這個例子里執行完之后a為1,而b為2。 但這個例子: int a1; int *b;…