1. 程式人生 > >簡要理解svn merge的幾種用法

簡要理解svn merge的幾種用法

版本管理中有一個很重要的概念,就是主幹和分支。對應於主幹和分支之間程式碼的合併操作,就會用到svn merge。

svn提供了4種不同形式的merge方法,分別如下:

1. merge SOURCE[@REV] [TARGET_WCPATH]
   (the 'sync' merge)  **同步合併**
2. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]
   (the 'cherry-pick' merge)  **摘選合併**
3. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]
   (the 'reintegrate' merge)  **歸源合併**
4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]
   (the '2-URL' merge)  **雙URL合併**

我們逐個進行介紹

1. merge SOURCE[@REV] [TARGET_WCPATH]

merge的第一種用法,就是最基本的合併方式。

首先從字面上解釋一下,source指需要合併的程式碼源,TARGET_WCPATH指目標工作區間,這條命令的意思是把source的內容合併到TARGET_WCPATH。

再來解釋一下merge的過程。在合併的過程中,svn會對兩個路徑下的資料夾、檔案進行對比。

  1. 從根目錄開始,source中的資料夾如果中TARGET_WCPATH找不到同名資料夾,則直接複製到TARGET_WCPATH;
  2. 如果找到同名資料夾,則資料夾內再依次深層比對,同名的再比對,不同名的複製,直到沒有資料夾可以比對;
  3. 對於檔案來說,文字檔案會對文字內容進行合併;而非文字檔案比如png、exe、gif等等,會產生衝突

上張圖片來說明一下資料夾的合併方式
這裡寫圖片描述

注意命令中[]中括號中的內容,代表可以省略。
我們將這條命令省略為merge SOURCE[@REV],也就是說source可以合併程式碼到source。 @REV是Peg Revision,它用於定位某些被刪除又重新建立的檔案。具體可以參考http://svnbook.red-bean.com/en/1.1/ch07s03.html,這裡不詳述。

2. merge [-c M[,N…] | -r N:M …] SOURCE[@REV] [TARGET_WCPATH]

第二種合併文件描述為cherry-pick(摘櫻桃),我翻譯為 摘選合併。它可以指定source的某些版本區間,在這些區間內的程式碼變更才進行合併。

-r 100:200 指source的版本100到200之間的程式碼。
-c可以算作-r的特殊用法,-c 200 等價於 -r 199:200,它指對比某個臨近版本的程式碼變更。

在這個命令中,-c -r可以指定多個,所以它稱為摘櫻桃,就是選某些版本(櫻桃)進行操作(來摘)。

3. merge –reintegrate SOURCE[@REV] [TARGET_WCPATH]

第三種合併,我翻譯為 歸源合併。
它要求source是從TARGET_WCPATH中拷貝建立的,然後在某個版本將所有程式碼變更合併回TARGET_WCPATH。
在這次合併後,source的新的修改無法再向TARGET_WCPATH合併,也就是一次性的回到源頭的合併。簡直像是個魔法啊,哈哈

這裡起到關鍵作用的就是–reintegrate選項。
另外注意,在歸源合併中,不能指定版本區間-r或-c。

4. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]

the ‘2-URL’ merge,雙URL的合併。

這個可以分為兩部分進行理解:

  1. diff SOURCE1[@N] SOURCE2[@M] ,對比這兩個URL的區別,假設為diff1
  2. 將有區別的內容diff1,合併到TARGET_WCPATH

以上就是幾種merge的用法介紹,

PS :實際上,對於svn來說並不存在主幹和分支這樣的模組,這是一個便於理解的虛擬概念,使大家中版本管理上有共同的描述形式。實際在使用merge時,只要是從一個工作區間到另一個工作區間,都可以進行合併操作。

在實際操作merge時,svn會對比需要merge的source和target的版本號,所以要注意一下版本號的情況。有的時候一直commit程式碼,但是沒有update過,你的本地版本號是不會變的,直接合並就會有問題。

相關推薦

簡要理解svn merge用法

版本管理中有一個很重要的概念,就是主幹和分支。對應於主幹和分支之間程式碼的合併操作,就會用到svn merge。 svn提供了4種不同形式的merge方法,分別如下: 1. merge SOURCE[@REV] [TARGET_WCPATH] (the

PHP header的用法

aid var esp comment har pos -type refresh fresh 跳轉頁面 header(‘Location:‘.$url); //Location和":"之間無空格。 聲明content-type header(‘content-

Java for循環的用法

java unboxing 比較 有效 post 編譯期 環比 開始 進行 原文鏈接:Java for循環的幾種用法 J2SE 1.5提供了另一種形式的for循環。借助這種形式的for循環,可以用更簡單地方式來遍歷數組和Collection等類型的對象。本文介紹使用這種

python用法的性能比較1.5

+= 用法 setup using _array __name__ 1.5 nump name import timeit sum_by_for = """ for d in data: s += d """ sum_by_sum = """ sum(data

3分鐘掌握MongoDB中的regex用法

lib cat 正則表達式 小寫 可選參數 介紹 src 我們 包括 3分鐘掌握MongoDB中的regex幾種用法背景Part1:寫在最前使用MySQL或其他關系型數據庫的朋友們都知道,使用模糊查詢的用法類似於:SELECT * FROM products WHERE s

java定時器的用法

comment 四種方法 out x64 instance system new ring main package com.lid; import java.util.Calendar; import java.util.Date; import j

Unity_C#判斷字符串為空的用法

tps rem ref har http string 使用 比較 itl 轉載自CSDN_FreeSon; https://blog.csdn.net/biaobiao1217/article/details/39047963 字符串判斷:string在C#中是一個引用類

格式化的用法

{0} clas pri code body OS stat main world String.format詳情參考地址 public class FormatWay { static final String detail_url = "http://www.ex

ng-class動態類用法

條件 clas bsp led span item sele 括號 color 方法1.邏輯在後面的中括號裏面 ng-class="{true : ‘checker disabled‘,false : ‘checker‘ }[selectAllButton]" 方

可改進的BigDecimal的用法

我在實際專案中發現現存的程式碼中對BigDecimal的使用有些可以改進的地方,在此記錄下來,供大家參考。   1、new BigDecimal(0)、new BigDecimal("0")、new BigDecimal(1)、new BigDecimal("1")、new BigDecimal

JavaScript中的this關鍵字的用法

JS 裡的 this 在 function 內部被建立 指向呼叫時所在函式所繫結的物件(拗口) this 不能被賦值,但可以被 call/apply 改變 1. this 和建構函式 function C(){ this.a = 37; }

關於sort函式的用法

1.要使用sort函式只需用#include <algorithm> 即可使用,語法描述為: sort(begin,end),表示一個範圍,例如: int _tmain(int argc, _TCHAR* argv[]) {  int a[20]={2,4,1,23,5,76,0,4

numpy.mean()的用法

import numpy as np x = np.array([1,2,3,4,5]) y = np.array([0,2,3,4,6]) z = np.array([[1,2],[3,4]])#二維陣列 np.mean(x==y)#返回條件成立的佔比 Out[5]: 0.599999

C#的new關鍵字的用法

一共有三種用法: 在 C# 中,new 關鍵字可用作運算子、修飾符或約束。 1)new 運算子:用於建立物件和呼叫建構函式。這種大家都比較熟悉,沒什麼好說的了。 2)new 修飾符:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。 3)new 約束:用於在泛型宣告中約束可能用作型

jquery事件綁定的用法

防止 thead hello 語法 多個 col rop 分享 tlist 常見的事件綁定的幾種方法 主要有on(),bind(),live(),delegate(),隨著版本的不斷更新,live(),bind(),delegate()被相繼棄用。live():1.7版本之

jquery事件繫結的用法

常見的事件繫結的幾種方法 主要有on(),bind(),live(),delegate(),隨著版本的不斷更新,live(),bind(),delegate()被相繼棄用。live():1.7版本之後被棄用bind()、delegate():3.0版本之後被棄用雖然在3.0之後的版本中有bind和deleg

Java中Array.sort()的用法[轉]

轉自: http://www.cnblogs.com/IT-sky/p/3749859.html?utm_source=tuicool&utm_medium=referral void java.util.Arrays.sort(int[] a, int fromIn

vue class style的用法

這幾種是我平常經常用的常規用法,並不是全部用法 class第一種用法:物件,true,false控制 this.$store.state.threeD.isactive:布林,用來控制activeclass這個類是否顯示 <span :class="{'bodstyle':true

關於java中Arrays.sort()的用法

今天看到了Arrays了(覺得自己學東西真是龜速啊),Arrays裡面有一個sort是針對陣列排序的。。。然後就看了看它的簡單用法 同樣轉載(我不生產程式碼,我只是程式碼的搬運工.....):http://www.tuicool.com/articles/iii6N3   

git merge 方式對的區別?

--no-ff指的是強行關閉fast-forward方式。 fast-forward方式就是當條件允許的時候,git直接把HEAD指標指向合併分支的頭,完成合並。屬於“快進方式”,不過這種情況如果刪除分支,則會丟失分支資訊。因為在這個過程中沒有建立commit git m