NO IMAGE
對SVN來說,這兩個資料夾本質上是一樣的,只是在使用中約定俗成將釋出版(不需要對此版本再做修改)放在tag下(一般就是所謂的基線),把還需要修改的版本放在branches下


branch是分支,branch的程式碼是會往前走的。而tag是標籤,我理解程式碼是靜止的 

這樣說可能比較抽象,舉例進行說明。 

branch主要會有這些應用的場景: 

1、階段性的版本發到現場使用,但trunk上還需要繼續做開發。這時候就會拉一個branch來定位現場問題,並出補丁。trunk繼續做開發,互不衝突。 

2、需要開發一些定製的需求,這時候也可以拉一個branch專門來做定製需求開發,在定製需求測試完成以後,再合入trunk 

tag主要會有這些應用的場景: 

1、一個版本轉測試,在轉測試之前打一個tag。這樣這個tag就和轉測試的版本是完全一致的,可以很方便地定位問題。 

比如說第一天,測試測出問題A,於是在trunk上修改了A.java。 

然後第二天,測試測出問題B,定位到也是在A.java上,但是由於這個時候A.java已經和測試環境不再一致(因為第一天改了)。那這個時候,用轉測試之前的那個tag,就可以用來定位問題B了 

2、要基於一個版本做升級包了,可以先將svn鎖庫,然後打一個tag。這時候svn庫就可以解鎖了,trunk上繼續提交程式碼都沒關係。然後將原始版本的tag,以及剛打的tag進行比對,製作升級包 

總的來說,branch的程式碼是動態的,還會繼續往前走,在合適的時候再合入trunk;而tag的程式碼是靜態的,可以理解為是隻讀的(當然tag也是可以寫的,但這樣的話就成了事實上的branch,用branch可能更合適)