SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
版本控制系統
              --以svn為例
                Ying-Shiuan Pan




2010/9/21                     1
Content
》 為什麼需要版本控制系統?

》 架設svn伺服器

》 怎麼用?
  基礎
  基礎-2 (衝突的處理)

  進階 (branch & tag)

  補充



                          2
為什麼需要版本控制系統?
》 專案沒辦法一個人完成
  Alice, Bob, Chloe, Daniel…
  Alice傳檔給Bob說:
        我完成了,接下來交給你
    Bob傳檔給Chloe說:
        我完成了,接下來交給你
  Daniel要幹嘛?
  Alice突然發現她有bug,怎麼辦?
        「欸,最新版檔案在哪?我要改一下bug」
                                3
為什麼需要版本控制系統?
》 天有不測風雲
    你怎麼備份你的程式碼?
      $ cp -R proj/* proj-20100901-1700/
      $ tar -zxf proj-20100901-
       1700.tar.gz proj/
      $ ./make_backup.py
         △ 壓縮、寄信、上傳、crontab定期執行……


》 幹嘛不把這些精神用在寫程式上?



                                            4
為什麼需要版本控制系統?
》 人非聖賢,孰能無過;知錯能改
  "Nobody really creates perfect code the
   first time... except me, but there is only one
   of me“ --Linus Torvalds
  「Bob!昨天這功能還好的,怎麼又壞了」
  Alice 解開昨天的版本、做diff、一一詢問
   這些是誰改?
》 幹嘛不把這些時間花在寫程式上?


                                                    5
有了版本控制軟體


         v7
         v6
                               Released
  v5     v5            v5           1.0
  v4     v4    v4      v4
  v3     v3    v3      v3
  v2     v2    v2      v2
  v1     v1    v1      v1
Alice   Bob   Chloe   Daniel       6
有了版本控制軟體
》 Alice改好了
    svn commit -m “[fixed] bug-0487”
》 Bob要上一版
    svn checkout URL -r r2
》 Chloe要看誰改了他的code
    svn annotate
》 Daniel發現昨天是好的,今天是爛的
    svn diff r1 r2
                                        7
有哪些版本控制軟體?
》 No   $$$$
   CVS
   SVN

   GIT

  …

》 $$$$
   Bitkeeper
   Visual SourceSafe

  …
                        8
真的有人在用嗎?
》 Linux,  gcc, GNOME, KDE, pidgin,
  firefox,新酷音, …………
》 Open Foundry
     PCMan, …
》 Google   code
     pcmanx, ibus, google chromium…
》 IBM,   TSMC, OSLab…

                                       9
SVN架構圖
                     Local
                     Workspace



                                         Local
                                     Workspace
Central
Repository   Local
             Workspace

                         Local
                         Workspace
                                         10
SVN架設
》 1.   svn伺服器
      svn://xxx.xxx.xxx


》 2.   apache + dav_svn module
   http://os.csie.ncku.edu.tw/svn/proj
   http://tinyurl.com/28am6m

》 3.   local file
      file://var/svn/proj
                                          11
SVN使用步驟
》 由SVN管理員建立一個svn          repository
》 專案管理員先svn import
》 開發成員先checkout

》 開發成員開始開發
 while (is_project_done == false) {
     svn update
     edit
     svn update
     svn commit
 }                                     12
(admin) svnadmin create
》$  sudo apt-get install
  subversion
》 $ mkdir ~/svn

》 $ svnadmin create ~/svn/PROJ



         create


svn管理員              Central
                                 13
                    Repository
(PM) svn import
》$  mkdir /tmp/proj
》 $ cd /tmp/proj

》 $ mkdir trunk tags branches

》 $ svn import ./
  file:///home/PM/proj -m
  “initial import”

        import

專案管理員                 Central      14
                      Repository
(Alice) svn checkout
 》$  svn checkout
   file:///home/PM/proj
   ~/alice/proj
 》 $ cd ~/alice/trunk




專案開發者a     checkout

                       Central
                       Repository   15
(Bob) svn checkout
》$  svn checkout
  file:///home/PM/proj
  ~/bob/proj
》 $ cd ~/bob/proj/trunk




                            16
Alice
》$    vim main.c
int main()
{
  return 0;
}

》$  svn add main.c
》 $ svn commit
     r2


                           17
Alice
》$    vim main.c
int main()
{
  fn_a();
  return 0;
}
void fn_a()
{
  puts(“fn_a v1n”);
}

》$    svn commit
     r3                       18
Bob
》$  svn update
》 $ vim bob.c
void fn_b()
{
  puts(“fn_b v1n”);
}

》$  svn add bob.c
》 $ svn commit
     r4
                             19
Bob
》$   vim main.c
int main()
{
  fn_a();
  fn_b();
  return 0;
}
....

》 尚未commit



                        20
Alice
》$  svn update
》 $ vim main.c
....
void fn_a()
{
  puts(“fn_a v2n”);
}

》$    svn commit
     r5

                               21
Bob
》$   svn commit
    ……error!
》$  svn update
》 $ cat main.c
  神奇的事情發生了!
  阿阿阿阿阿阿阿!!

  他居然合併了耶!!

》$   svn commit
    r6                 22
(Alice) svn diff
》$   svn update
    !?我的main.c被改了,被改了什麼??
》$  svn log
》 $ svn diff main.c -r 5
    不加版號是比對目前版本與base的差異




                              23
小結-1
》 先update再改

》 先update再commit
  確保可以編譯過再commit
  commit log一定要寫!

》 基本上,以base版本為比較基準,沒有
 改到同一行的話,可以無痛合併
    改到同一行,咩安抓?


                        24
Alice
》$   vim main.c
int main()
{
  fn_a();
  fn_b2();
  return 0;
}

》$   svn commit


                          25
Bob
     //忘了先update,或是update之後別人有
      commit
》$    vim main.c
int main()
{
  fn_a();
  fn_b5();
  return 0;
}

》$    svn update
     !!!!!!!! Conflict!!!!!!     26
Bob


  postpone: 延後處理
                            文字介面
  mc: 衝突部份接受自己的版本           才有!
  tc: 衝突部份接受他人的版本

》 延後處理會產生三個檔案:
  main.c.mine   //自己的修改版
  main.c.r10    //base版本
  main.c.r11    //衝突版本        27
Bob
》 原本的main.c會變成……



    自己修改的



   別人修改的




                   28
衝突的解法
》 溝通

》 溝通

》 溝通

》 溝通

》 溝通
         廢話
》 溝通

》 溝通

               29
衝突的解法
》 溝通、討論完、編輯main.c
》$   svn resolved main.c
    會移除3個相關檔案.mine, .r10, .r11
》…
》$   svn commit




                                  30
小結-2
》 改到同一行會有衝突

》 溝通、討論
》 一定要svn   resolved




                      31
branch & tag
》 Branch
     暫時進行測試用的、除錯用的、開發新功能
》 Tag
     stable、可以release的版本




                             32
branch & tag
                   branch-1-1
                                 merge
        branch-1
                        merge
trunk
            tag         merge    merge
                                         2.0
                  1.0
                         1.1
                                 1.2

                                               33
branch & tag
》 在svn中,branch跟tag的差別不大
》$   svn copy addr_from addr_to
    svn copy file:///svn/proj/trunk
     file:///svn/proj/branches/bug-8642
》$   svn merge addr_from addr_to




                                          34
小結-3
》 版本(revision)號碼是線性成長,
  branch/tag的版本號碼與trunk共用
》 merge 後branch或tag的資料夾依然存在
    有需要,要自己svn rm
》 merge時,一樣可能發生衝突,請參閱小
 結-2



                              35
補充 - 哪些檔案要放上svn
》 無法自動產生的

》 程式碼

》 Makefile

》 configure

》 文件

》 圖片、圖示!?



                         36
補充 - 哪些檔案不用放上svn
》 可以自動產生的

》 objectfile
》 執行檔

》 如果你會寫autoconf,那Makefile、
  configure file也不用放 :p




                             37
補充 - 其他指令
》   svn status         》 svn mkdir
    ×   看哪些檔案被改過、      》 svn mv (=rename,
        衝突、等狀態           move, ren)
》   svn info           》 svn rm (=del,
    ×   repository資訊     delete)
》   svn revert XXX         ×   這三項做完,別忘了
    ×   拋棄檔案的修改內容              要commit




                                           38
補充 - 指令縮寫
》   checkout           》   annotate
    ×   co                 ×   ann
》   commit
    ×   ci
》   status
    ×   stat, st
》   diff
    ×   di


                                      39
補充 - Svn GUI
》 Windows
     TortoiseSVN
》 Linux
     rapidsvn




                                40
有問題嗎?

        41
參考資料
》 Jserv   - 淺談版本控制系統
     http://blog.linux.org.tw/~jserv/archives/0011
      48.html
》 Version    Control with Subversion
     http://www.csie.ntut.edu.tw/sdrc/files/cours
      e/20061027/SVN.pdf

Contenu connexe

Tendances

makefile20141121
makefile20141121makefile20141121
makefile20141121
Kevin Wu
 
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
LetAgileFly
 
Subversion简明教程
Subversion简明教程Subversion简明教程
Subversion简明教程
Liang
 
Cent os 安装 subversion
Cent os 安装 subversionCent os 安装 subversion
Cent os 安装 subversion
YUCHENG HU
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
Yiwei Ma
 
Track1dongsiying4
Track1dongsiying4Track1dongsiying4
Track1dongsiying4
drewz lin
 
Redis 多机特性工作原理简介v2
Redis 多机特性工作原理简介v2Redis 多机特性工作原理简介v2
Redis 多机特性工作原理简介v2
ayanamist
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
haiyuan ning
 

Tendances (20)

makefile20141121
makefile20141121makefile20141121
makefile20141121
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
 
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
 
Ali-tomcat
Ali-tomcatAli-tomcat
Ali-tomcat
 
开源Pass平台flynn功能简介
开源Pass平台flynn功能简介开源Pass平台flynn功能简介
开源Pass平台flynn功能简介
 
Aswan&hump
Aswan&humpAswan&hump
Aswan&hump
 
Subversion简明教程
Subversion简明教程Subversion简明教程
Subversion简明教程
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Cent os 安装 subversion
Cent os 安装 subversionCent os 安装 subversion
Cent os 安装 subversion
 
Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生
 
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
Track1dongsiying4
Track1dongsiying4Track1dongsiying4
Track1dongsiying4
 
Docker
DockerDocker
Docker
 
了解Oracle critical patch update
了解Oracle critical patch update了解Oracle critical patch update
了解Oracle critical patch update
 
Redis 多机特性工作原理简介v2
Redis 多机特性工作原理简介v2Redis 多机特性工作原理简介v2
Redis 多机特性工作原理简介v2
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 

Similaire à Intro to svn

Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
JoXuZi
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
Shuo Chen
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
Wu Liang
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
 
利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版
xingsu1021
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
Yiwei Ma
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guide
phantoxe
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guide
phantoxe
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
colderboy17
 
OpenCV 2.4.2在codeblocks 10.05的環境設定
OpenCV 2.4.2在codeblocks 10.05的環境設定OpenCV 2.4.2在codeblocks 10.05的環境設定
OpenCV 2.4.2在codeblocks 10.05的環境設定
菌 細
 

Similaire à Intro to svn (20)

自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
 
A
AA
A
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
 
GIT實務操作與理論
GIT實務操作與理論GIT實務操作與理論
GIT實務操作與理論
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guide
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guide
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
OpenCV 2.4.2在codeblocks 10.05的環境設定
OpenCV 2.4.2在codeblocks 10.05的環境設定OpenCV 2.4.2在codeblocks 10.05的環境設定
OpenCV 2.4.2在codeblocks 10.05的環境設定
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Git basis - usage
Git basis - usageGit basis - usage
Git basis - usage
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 

Intro to svn

  • 1. 版本控制系統 --以svn為例 Ying-Shiuan Pan 2010/9/21 1
  • 2. Content 》 為什麼需要版本控制系統? 》 架設svn伺服器 》 怎麼用?  基礎  基礎-2 (衝突的處理)  進階 (branch & tag)  補充 2
  • 3. 為什麼需要版本控制系統? 》 專案沒辦法一個人完成  Alice, Bob, Chloe, Daniel…  Alice傳檔給Bob說:  我完成了,接下來交給你  Bob傳檔給Chloe說:  我完成了,接下來交給你  Daniel要幹嘛?  Alice突然發現她有bug,怎麼辦?  「欸,最新版檔案在哪?我要改一下bug」 3
  • 4. 為什麼需要版本控制系統? 》 天有不測風雲  你怎麼備份你的程式碼?  $ cp -R proj/* proj-20100901-1700/  $ tar -zxf proj-20100901- 1700.tar.gz proj/  $ ./make_backup.py △ 壓縮、寄信、上傳、crontab定期執行…… 》 幹嘛不把這些精神用在寫程式上? 4
  • 5. 為什麼需要版本控制系統? 》 人非聖賢,孰能無過;知錯能改  "Nobody really creates perfect code the first time... except me, but there is only one of me“ --Linus Torvalds  「Bob!昨天這功能還好的,怎麼又壞了」  Alice 解開昨天的版本、做diff、一一詢問 這些是誰改? 》 幹嘛不把這些時間花在寫程式上? 5
  • 6. 有了版本控制軟體 v7 v6 Released v5 v5 v5 1.0 v4 v4 v4 v4 v3 v3 v3 v3 v2 v2 v2 v2 v1 v1 v1 v1 Alice Bob Chloe Daniel 6
  • 7. 有了版本控制軟體 》 Alice改好了  svn commit -m “[fixed] bug-0487” 》 Bob要上一版  svn checkout URL -r r2 》 Chloe要看誰改了他的code  svn annotate 》 Daniel發現昨天是好的,今天是爛的  svn diff r1 r2 7
  • 8. 有哪些版本控制軟體? 》 No $$$$  CVS  SVN  GIT … 》 $$$$  Bitkeeper  Visual SourceSafe … 8
  • 9. 真的有人在用嗎? 》 Linux, gcc, GNOME, KDE, pidgin, firefox,新酷音, ………… 》 Open Foundry  PCMan, … 》 Google code  pcmanx, ibus, google chromium… 》 IBM, TSMC, OSLab… 9
  • 10. SVN架構圖 Local Workspace Local Workspace Central Repository Local Workspace Local Workspace 10
  • 11. SVN架設 》 1. svn伺服器  svn://xxx.xxx.xxx 》 2. apache + dav_svn module  http://os.csie.ncku.edu.tw/svn/proj  http://tinyurl.com/28am6m 》 3. local file  file://var/svn/proj 11
  • 12. SVN使用步驟 》 由SVN管理員建立一個svn repository 》 專案管理員先svn import 》 開發成員先checkout 》 開發成員開始開發 while (is_project_done == false) { svn update edit svn update svn commit } 12
  • 13. (admin) svnadmin create 》$ sudo apt-get install subversion 》 $ mkdir ~/svn 》 $ svnadmin create ~/svn/PROJ create svn管理員 Central 13 Repository
  • 14. (PM) svn import 》$ mkdir /tmp/proj 》 $ cd /tmp/proj 》 $ mkdir trunk tags branches 》 $ svn import ./ file:///home/PM/proj -m “initial import” import 專案管理員 Central 14 Repository
  • 15. (Alice) svn checkout 》$ svn checkout file:///home/PM/proj ~/alice/proj 》 $ cd ~/alice/trunk 專案開發者a checkout Central Repository 15
  • 16. (Bob) svn checkout 》$ svn checkout file:///home/PM/proj ~/bob/proj 》 $ cd ~/bob/proj/trunk 16
  • 17. Alice 》$ vim main.c int main() { return 0; } 》$ svn add main.c 》 $ svn commit  r2 17
  • 18. Alice 》$ vim main.c int main() { fn_a(); return 0; } void fn_a() { puts(“fn_a v1n”); } 》$ svn commit  r3 18
  • 19. Bob 》$ svn update 》 $ vim bob.c void fn_b() { puts(“fn_b v1n”); } 》$ svn add bob.c 》 $ svn commit  r4 19
  • 20. Bob 》$ vim main.c int main() { fn_a(); fn_b(); return 0; } .... 》 尚未commit 20
  • 21. Alice 》$ svn update 》 $ vim main.c .... void fn_a() { puts(“fn_a v2n”); } 》$ svn commit  r5 21
  • 22. Bob 》$ svn commit  ……error! 》$ svn update 》 $ cat main.c  神奇的事情發生了!  阿阿阿阿阿阿阿!!  他居然合併了耶!! 》$ svn commit  r6 22
  • 23. (Alice) svn diff 》$ svn update  !?我的main.c被改了,被改了什麼?? 》$ svn log 》 $ svn diff main.c -r 5  不加版號是比對目前版本與base的差異 23
  • 24. 小結-1 》 先update再改 》 先update再commit  確保可以編譯過再commit  commit log一定要寫! 》 基本上,以base版本為比較基準,沒有 改到同一行的話,可以無痛合併  改到同一行,咩安抓? 24
  • 25. Alice 》$ vim main.c int main() { fn_a(); fn_b2(); return 0; } 》$ svn commit 25
  • 26. Bob  //忘了先update,或是update之後別人有 commit 》$ vim main.c int main() { fn_a(); fn_b5(); return 0; } 》$ svn update  !!!!!!!! Conflict!!!!!! 26
  • 27. Bob  postpone: 延後處理 文字介面  mc: 衝突部份接受自己的版本 才有!  tc: 衝突部份接受他人的版本 》 延後處理會產生三個檔案:  main.c.mine //自己的修改版  main.c.r10 //base版本  main.c.r11 //衝突版本 27
  • 28. Bob 》 原本的main.c會變成…… 自己修改的 別人修改的 28
  • 29. 衝突的解法 》 溝通 》 溝通 》 溝通 》 溝通 》 溝通 廢話 》 溝通 》 溝通 29
  • 30. 衝突的解法 》 溝通、討論完、編輯main.c 》$ svn resolved main.c  會移除3個相關檔案.mine, .r10, .r11 》… 》$ svn commit 30
  • 32. branch & tag 》 Branch  暫時進行測試用的、除錯用的、開發新功能 》 Tag  stable、可以release的版本 32
  • 33. branch & tag branch-1-1 merge branch-1 merge trunk tag merge merge 2.0 1.0 1.1 1.2 33
  • 34. branch & tag 》 在svn中,branch跟tag的差別不大 》$ svn copy addr_from addr_to  svn copy file:///svn/proj/trunk file:///svn/proj/branches/bug-8642 》$ svn merge addr_from addr_to 34
  • 35. 小結-3 》 版本(revision)號碼是線性成長, branch/tag的版本號碼與trunk共用 》 merge 後branch或tag的資料夾依然存在  有需要,要自己svn rm 》 merge時,一樣可能發生衝突,請參閱小 結-2 35
  • 36. 補充 - 哪些檔案要放上svn 》 無法自動產生的 》 程式碼 》 Makefile 》 configure 》 文件 》 圖片、圖示!? 36
  • 37. 補充 - 哪些檔案不用放上svn 》 可以自動產生的 》 objectfile 》 執行檔 》 如果你會寫autoconf,那Makefile、 configure file也不用放 :p 37
  • 38. 補充 - 其他指令 》 svn status 》 svn mkdir × 看哪些檔案被改過、 》 svn mv (=rename, 衝突、等狀態 move, ren) 》 svn info 》 svn rm (=del, × repository資訊 delete) 》 svn revert XXX × 這三項做完,別忘了 × 拋棄檔案的修改內容 要commit 38
  • 39. 補充 - 指令縮寫 》 checkout 》 annotate × co × ann 》 commit × ci 》 status × stat, st 》 diff × di 39
  • 40. 補充 - Svn GUI 》 Windows  TortoiseSVN 》 Linux  rapidsvn 40
  • 42. 參考資料 》 Jserv - 淺談版本控制系統  http://blog.linux.org.tw/~jserv/archives/0011 48.html 》 Version Control with Subversion  http://www.csie.ntut.edu.tw/sdrc/files/cours e/20061027/SVN.pdf