2008年9月4日 星期四

程式設計的版本控制 - SVN - 完整例子說明

今天花了一整天,總算把SVN弄的差不多了~雖然今天花很多時間,但是,我知道這個系統會替我以後寫程寫省很多時間(我猜的)~
那我們就用一個完整的簡單例子來說明吧~

環境:Linux文字模式、Google的Project Hosting

申請跟測式的步驟在程式設計的版本控制 - SVN說明的應該很清楚了~這裡我們直接用例子來說明吧~

建立一個新的project吧~我這裡的示範project是goodmorn,那當然啦~我的帳號是superporter2001

這裡先假設已經看過前一篇文章,在google的Project Hosting建立一個新的Project叫做goodmorn

我們在建立一個~/svn資料夾,並且進入這一個資料夾

[root@host ~]# mkdir svn
[root@host ~]# cd svn


將資料 checkout 回來,也就是說把google Project Hosting的goodmorn Project下載到目前目錄下的goodmorn

[root@host ~/svn]# svn checkout https://goodmorn.googlecode.com/svn/trunk/ goodmorn --username superporter2001

系統會多一個~/svn/goodmorn的資料夾

在我們寫完一個main.cpp檔案完之後,這一個檔案的目錄在~/svn/goodmorn下,我們將此檔案(目錄)新增進 svn中

[root@host ~/svn]# svn add goodmorn/main.cpp


然後,我們上傳到svn中

[root@host ~/svn]# svn commit goodmorn


耶~那這個時候大家可能會說~那我一個檔案要add一次~那我很多檔案不就要add很多次?其實不用,假設在~/svn/goodmorn/testfile/下有3個檔案a.jpg、b.jpg、c.jpg,我們只要打以下指令

[root @host ~/svn]# svn add goodmorn/testfile/

它就會把testfile下的檔案都加進去啦~

這裡有一個例子要大家注意~若我新增一個testfile2,那我要如何更新到svn server呢?有兩個方法
方法1

[root@host ~/svn/goodmorn]# mkdir testfile2
[root@host ~/svn/goodmorn]# svn add testfile2

方法2

[root@host ~/svn/goodmorn]@ svn mkdir testfile2

這裡要跟各位說的是,若有要move、copy、mkdir的話,就用svn內建的指令吧~可求助svn help
注意,當專案納入subversion的控管後,若要對專案內的檔案作刪減增加,必須都用client軟體內的對應功能來操作,否則可能會有問題。另外就是專案下的每個目錄中皆有.svn的隱藏目錄,這是subversion用來控管的目錄,請不要刪除或修改裡面的內容。

同時,我發現一個情況~我本來在其它資料夾放置我之前寫好的程式碼,我把它copy到~/svn/goodmorn,但是,確發生問題~
svn: warning: 'car-sim_1.00' is already under version control
耶~它說早就在控管中~但是,commit它確沒有上傳~找到一個強制的方法~

[root@host ~/svn]# svn import car-sim_1.00 https://goodmorn.googlecode.com/svn/trunk/

硬是把它上傳上去,等一下再checkout下來~就正常了~
會照成上面的原因是因為在要上傳的資料夾中,有.svn的檔案存在,所要上傳時,系統才會說因為資料夾已在控管中,決解方法是把隱藏檔.svn刪除~

[root@host ~]# find ./ -name .svn -exec rm -rfv {} \;

就可以把目前目錄下(包含子目錄)的.svn檔案全部刪除~

與svn server比較檔案差異也很好用喔~

[root@host ~/svn/goodmorn]# svn status

SVN 檔案狀態資訊:

  • ?: 此檔案不存在 SVN 裡面
  • A: 此次新增的檔案
  • C: 此檔案已經有人改過, 合併不成功, 需要人工介入
  • D: 此次移除的檔案
  • M: 此檔案有修改過
  • U: 此檔案有被更新過

沒有留言:

張貼留言