version control brief

Post on 24-Oct-2014

36 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

淺談版本控制系統淺談版本控制系統

觀念介紹與版本控制系統軟體介紹

Jim Huang (黃敬群 )http://jserv.sayya.org/May 19, 2005

目標 理解版本控制系統的重要性與優點,並如

何導入開發流程 版本控制系統軟體 Subversion 觀念與快速入門

為何需要版本控制 (Version Control) ?

在需要協同開發 / 創作的環境中,確保能夠進行…保有所有更動的紀錄得以快速回復到特定版本的狀態得知成員的更動與其更動幅度

Code Peer review 鼓勵版本異動文件創作

典型的版本變遷

RELEASE 1.0

RELEASE 1.5

RELEASE 2.0

C.I. 1

1.0

1.1

1.2

C.I. 2

1.0

C.I. 3

1.0

1.1

1.2

C.I. X

1.0

1.3

1.1

1.2

1.3

1.4

1.1

1.5

1.6

1.7

1.4

1.5

1.2

1.3

1.4

軟體系統化管理

Configuration Builder

(Build scripting tool)

Tracker(Issue management)

Version Manager(Version control, Release

management)

Oracle,Sybase, etc.

版本控制系統是什麼? 能夠追蹤、比較、回復、提交程式碼或文

件更動的系統,同時也要能夠跨越多個環境與群組開發時程的系統

維護並時 (concurrent) 的更動與保有每個版本的程式碼與文件狀態資訊

版本控制系統 ( 集中化模式 )

A

Central RepositoryLocal Workspace(s)

A

Synchronization

詞彙: Repository vs. Workspace workspace

一系列透過版本控制系統的程式碼與文件集合,開發者可以在本機上進行維護與修改的動作

repository 在集中式版本控制系統的主機上,保存文件與

程式碼的資料庫或檔案庫

版本控制系統軟體 Commercial

Bitkeeper Visual SourceSafe

Open Source / Free SCCS RCS (Walter F. Tichy, 1982)

CVS (Brian Berliner & Jeff Polk, 1992)

GNU Arch Subversion (Karl Fogel, 2002)

SVK (clkao, 2004)

CVS (Concurrent Version System) 歷久彌新 CVS 伺服器組態設定

Pserver relatively easy to configure on the client side, low

security

SSH high security, client & server configuration a bit

trickier

CVS 優點 歷史悠久 在許多現有的軟體專案施行有年,系統穩

定,相關工具也豐富 設定與操作相對簡易

CVS 缺點 Security! 不能移除目錄 二進位檔案有可能被修改 效率

Subversion

CVS 的替代計畫,與 CVS 具有類似的操作方式與流程

多樣的伺服器配置方式:Apache web serversvnserve

custom serversvnserve & ssh

custom server with encryption layer

Subversion 優點 目錄版本控制 不可分割的送交 網路傳輸快速 參數一致 更佳的二進制處理 高效率的分支與標記

Subversion 缺點 仍然是集中式的版本控制系統 缺乏獨佔編輯權的設計 更動版本號是共用的

SVK -- 非集中式版本控制系統 以 Subversion 為基礎,但是同時支援現

有 CVS 的 repository 可取出完整的更動映射 大量的合併操作

Subversion

集中式版本控制系統 (Centralized VCS) Released Feb. 2004, Open Source HTTP/WebDAV access “Better CVS” Graphical Client Tools

TortoiseSVN,..

Subversion 系統架構 概念性的兩端

本機端檔案系統 Typically used for a single developer Accessed via direct file read/write

access Requires that users have local

accounts Uses filesystem and user/group

security 遠端系統

Accessed via a HTTP or HTTPS connection

Does not require that users have accounts on the server

Use Apache style authentication

存取 Subversion 的途徑 Web - Browser

RO

WebDAV Mount Repository as

webfolder

SVN Client tool Local Repository copy

Repository Resources

所有被 Subversion 管理的檔案與目錄都有唯一的 URL 表示法

支援的 URL protocolshttp, https (SSL encryption)

http://svn.csie.net/svn/prj/trunk/TopGun

protocol host repository directory

獲得 Subversion 存取權限 可透過內建 (svn) 或 WebDAV 的方式認

證 Install/Use Client Software

BrowserWeb-Folder SupportTortoiseSVN (TortoiseSVN.tigris.org)

TortoiseSVN

Subversion Client Windows Explorer

Extension

Subversion 核心操作 Import/Checkout Update/Commit Branch/Tag Switch/Merge

import

將本地端目錄結構新增至既有的 repository One time operation. 在本地端目錄被 import 後,需要再次 check out

確保其他開發者能夠存取到 import 的目錄

Import

Central RepositoryLocal Workspace(s)

A

import

A

Central RepositoryLocal Workspace(s)

A

before

after

in sync

Fort.f77

場景: work/fort.f77 即將透過 Subversion 管理

import

Check Repository

Use Web Browser in System

Use Repo-Browser in Tortoise

Subversion 指示器 在檔案總管的目錄與檔案圖示就會有一個

打勾的符號 ‘.svn’ 目錄保有該版本資訊

checkout

在本機檔案系統上,從 repository 取出文件與程式碼,並建立一份工作副本 (working copy)

One time operation. 給予工作副本來源屬性資訊 在開始工作的前置動作

Checkout

Central RepositoryLocal Workspace(s)

checkout

A

Central RepositoryLocal Workspace(s)

A

before

after

in sync

A

Checkout

Local Work on fort.f77

場景:取出 fort.f77 並作修改 最後將 ‘ commit’ 到 repository

commit

確保 workspace 與 repository 的一致與同步 (sync)

本地端的修改包含:文件與程式碼內容的修改、刪除,以及新增當開發者認為足以公布本地端修改到

repository 時

commit

Central RepositoryLocal Workspace(s)

commit

A’

Central RepositoryLocal Workspace(s)

A’

before

after

in sync

A A’

‘commit’ 的時機 最好能夠一次提交概念性、官能性,或者任務導向性的修改

至少確保原始程式碼還能通過編譯 更動記錄應該被保存在 commit 訊息中

commit

Subversion Revision Number Revision number 代表整個 repository 的

更動版本號並非只是本地端修改的版本號

“HEAD” 表示最新的版本

歷史修改記錄 追蹤 revisions

版本號 作者 訊息 更動文件與檔案

版本間的比較

比較特定 revision 與本地端版本的差異

update

將 repository 上的版本整合到本地端的工作副本

將 workspace 同步於 repository有可能會出現衝突Subversion 會試圖作有限度的整合與提醒

update

Central RepositoryLocal Workspace(s)

update

A’

Central RepositoryLocal Workspace(s)

A’

before

after

in sync

A’ A

Update

檢驗 repository 相較於本機端的版本是否有修改?

Check Log again! New revision 5 is

there.

Do update!

What is new ?

切換到特定 Revision 需要回復到之前的版本

哪些檔案應該置放於版本控制系統?

Source Code files*.c, *.cpp, *.java, *.for, *.txt, …

程式關連檔案,如:Build / Configuration filesDocumentationTest code + data sets

What does not go into Subversion? 可由原始程式碼衍生的檔案暫時性或過渡性檔案

*.o; *.obj, *.dll, *.exe, *.dvi當然,有時候允許例外

很少需要重新產生 (regenerated) 的資訊檔不容易透過整合開發環境或現有工具再產生的項目

可被 Subversion 忽略的檔案或目錄 目錄內的 Subversion:ignore

屬性可以告知 Subversion 忽略檔案與目錄的修改

Branch

邏輯上來說,相較於現行發展線的獨立開發項目

“branch” 基本上是開始於某份工作副本,經過一番修改與維護,所展開的分支

Branch 建立分支的時間點

某個開發者或團隊針對新的考量: 可能會對 main line 造成衝擊 衍生成為獨立的產品

Time

Main development line(e.g. RZWQM)

1st branch (e.g. RZWQM DSSAT)

2nd branch

branch

branch

Branch

Delete

在本機端工作副本與 repository 上移除檔案或目錄的操作

在 commit 之前,只會刪除本地端工作副本的檔案,而不會影響到 repository

Repository Layout

trunk main development

code base

branches subproject branches

tags tagged releases

branchesbranches

tagstags

trunktrunk

//

rzwqmrzwqm

rzwqm-98rzwqm-98

rzwqm-depression

rzwqm-depression

Branch 將分支間的差異套用到現行的工作副本

Time

Main development line(e.g. RZWQM)

1st branch (e.g. RZWQM DSSAT)

2nd branch

branch

branch

merge

merge

Merge

“merge” 的時機整合 branch 之間的更動整合不同 branch 之間的加強與重大修正到

trunk建立新產品的修正項目

參考資訊 Subversion

http://svnbook.red-bean.com/ http://tortoisesvn.tigris.org http://subversion.tigris.org

CVS Best Practices http://www.magic-cauldron.com/cm/cvs-bestpractices/

Version Control With Subversion http://svnbook.red-bean.com/svnbook-1.0/svn-book.html

Practicing Subversion within Debian Project http://www.deadbeast.net/~branden/svn_pres/top.html

Questions?

top related