1 配置管理名詞定義
1.1 配置項
軟件生存周期各個階段活動的產物經審批后即可稱之為軟件配置項。
軟件配置項包括:
①與合同、過程、計划和產品有關的文檔和資料;
③相關產品,包括軟件工具、庫內的可重用軟件、外購軟件及顧客提供的軟件等。
1.2 配置項標識
配置標識是定義各類配置項、建立各種基線、描述相關軟件配置及其文檔的過程。
配置標識是指為了方便對軟件配置的各個片段進行管理,必須對每一個配置項進行標識。其原則為:
(1)用易於理解和推測的方式定義文件的標識;
(2)當需要修改時,提供進行修改和跟蹤它們的方法;
(3)為了便於控制與管理,要隱含如下內容:配置項內容、版本、完成時間等。
1.3 版本
軟件版本一般只在軟件開發公司內部運行,不對外公開。主要是開發者自己對產品進行測試,檢查產品是否存在缺陷、錯誤,驗證產品功能與說明書、用戶手冊是否一致。Alpha版本的產品仍然需要完整的功能測試,而其功能亦未完善,但是可以滿足一般需求。因為它是整個軟件釋出周期中的第一個主要階段,所以它的名稱是“Alpha”,希臘字母中的第一個字母。
1.4 基線
在計算機術語中,基線是項目儲存庫中每個工件版本在特定時期的一個“快照”。它提供一個正式標准,隨后的工作基於此標准,並且只有經過授權后才能變更這個標准。建立一個初始基線后,以后每次對其進行的變更都將記錄為一個差值,直到建成下一個基線。
1.5 配置庫
存放配置項的數據庫,常用兩種形式:按配置項類型分類建庫和按任務建庫。
一般包括以下幾種:
開發庫:用於存放項目期間處於開發狀態的相關文檔和代碼。以及存放項目組工作期間的相關溝通記錄等
受控庫:用於存放經過驗證后的產品(包括基線產品);建立測試區,用於存放開發工作結束后需要進入測試的配置項,以及為變更實施提供工作空間。
產品庫:存放發布后的產品。
2 SVN操作說明
2.1 相關操作:
(1)add:將文件或目錄加入SVN庫。
注意:如果添加目錄的話,目錄下的所有文件會同時被添加
(2)check out:將SVN服務器上的項目文件下載到本地目錄
注意:在checkout 時有一個檢出深度,有如下選項:
①全遞歸(默認選擇):檢出完整的目錄樹,包含所有的文件或子目錄。
②直接節點,包含目錄: 檢出目錄,包含其中的文件或子目錄,但是不遞歸展開子目錄。
③僅文件子節點:檢出指定目錄,包含所有文件,但是不檢出任何子目錄。
④.僅此項:只檢出目錄。不包含其中的文件或子目錄。
(3)update:更新工作副本使其成為版本庫中的最新版本
(4)commit:將在工作副本做的修改進行提交
注意:為了以后能更清晰的看到自己所做的每一次更改的原因,在提交時應該寫上注釋
(5)delete:刪除文件或目錄
(6)revert:撤銷本地所有未提交的修改
注意:還沒有執行commit操作之前執行此命令才可以,否則無效
(7)rename:修改文件名
(8)branch:建立分枝
3 GitHub操作說明
3.1 GitHub的基本簡介:
Git是一個分布式的版本控制系統,最初由Linus Torvalds編寫,用作Linux內核代碼的管理。在推出后,Git在其它項目中也取得了很大成功,尤其是在Ruby社區中。目前,包括Rubinius、Merb和Bitcoin在內的很多知名項目都使用了Git。Git同樣可以被諸如Capistrano和Vlad the Deployer這樣的部署工具所使用。
3.2 GitHub的基本操作:
(1)注冊賬號以及創建倉庫:
注冊 GitHub賬號:http:// github.com
(2)安裝客戶端msysgit:
github是服務端,還需要一個git客戶端msysgit,這個只是提供了git的核心功能。裝完msysgit 后右鍵鼠標會多出一些選項來,在本地倉庫里右鍵選擇 git init here ,會多出來一個.git 文件夾,這就表示本地git 創建成功。
(3)配置SSH :
SSH 是一種連接方式,一方面免於總是在連接時輸入用戶和密碼,另一方面增加安全性。
SSH是兩段很長的字符,一段是鎖,另一段是鑰匙。
1)第一步,生成密鑰和鎖
2)第二部,將鎖放置到github的賬戶里
C:/users/用戶名(windows用戶)/.ssh/文件夾中,用記事本打開其中的id_rsa.pub文件,全部內容復制。回到https://github.com ,進入Account Settings,左邊選擇SSH Keys ,Add SSH Key,title 隨便填,粘貼key。
3)第三步,測試是否成功
為了驗證是否成功,在git bash下輸入:ssh-T git@github.com
若是第一次的會提示是否continue,輸入yes 會看到:
You’ve successfully authenticated,but GitHub does not provide shell access.
此即表示已經成功連上github
(4)設置用戶信息:
Global user,name”your name ”
Global user.email”your email”
(5)工作區和暫存區:
工作區(working directory):即在電腦里能看到的目錄
版本庫(repository):工作區有一個隱藏目錄.git,這個是git 的版本庫。
暫存區(stage 或者 index):存於git 的版本庫里。
(6)遠程倉庫:
1)創建遠程倉庫
在github 首頁,點擊頁面右上角“new repository”;填寫項目信息(project name和description );點擊“create repository”,在github上創建一個倉庫。
2)在本地創建一個相同的倉庫
在電腦上任意一個文件夾,新建一個目錄,目錄名與在github上所建庫的名字相同。然后右擊文件夾,在彈出菜單中選擇git bash,彈出命令行窗口,輸入:git init,此時git 會在這個文件夾下創建一個隱藏目錄,此即為本地庫。
3)綁定本地庫和遠程庫
將本地庫傳到github 上去,后添加遠程地址:
git remote add origin git@github.com:yourname/yourrepo.git
添加完之后進入.git,打開config,這里會多出一個remote“origin”內容,此即為剛剛添加的遠程地址,亦可直接修改config來配置遠程地址。
4)提交、上傳
$ git add //添加文件
$ git commit-m’first commit’//提交更新,並注釋信息’first commit’
$ git push origin master //git push 命令會將本地倉庫推送到遠程服務器。
5)從遠程庫克隆
登陸GitHub,創建一個新的倉庫,名為gittest;
勾選Initialize this repository with a README,自動創建一個 README.md文件;
用命令git clone 克隆一個本地庫:$git clone git@github.com:yourname/gittest.git
(7)分支管理
1)創建和合並分支
查看分支:git branch
創建分支:git branch<name>
切換分支:git checkout<name>
創建+切換分支:git checkout-b<name>
合並某分支到當前分支:git merge<name>
刪除分支:git branch-d<name>
2)分支策略(基本原則)
一是 master分支是非常穩定的,其僅用來發布新版本;
二是dev分支是不穩定的。
(8)協作開發
第一步:進行Fork
第二步:進行克隆:利用右側邊欄中的URL對repo進行克隆
第三步:添加上游遠程倉庫:Git remote add upstream
第四步:檢查主分支
第五步:提交
第六步:推送
第七部:創建pull request
4 GIT與SVN比較
1.GIT是分布式的,SVN不是:
SVN屬於集中式的版本控制系統,而GIT是分布式的。對於SVN來說,每個版本庫有唯一的URL,每個用戶都從這個地址獲得數據的更新,提交時必須授權以及網絡的連接。而在GIT中每個克隆的版本庫是平等的,可以從任何一個版本庫的克隆來創建自己的版本庫,GIT的提交完全在本地完成,無需授權,並且可以脫離網絡
2.GIT把內容按元數據方式存儲,而SVN是按文件
所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾里。如果你把.git目錄的 體積大小跟.svn比較,你會發現它們差距很大。因為,.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標簽,分 支,版本記錄等
3.GIT分支和SVN的分支不同:
SVN和GIT的分支不同分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。如果你想知道是否合並了一個分支,你需要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合並。然而,處理GIT的分支卻是相當的簡單和有趣。你可以從同一個工作目錄下快速的在幾個分支間切換。你很容易發現未被合並的分支,你能簡單而快捷的合並這些文件。
4.GIT沒有一個全局的版本號,而SVN有:
SVN的版本號實際是任何一個相應時間的源代碼快照,SVN是全局版本號,GIT是全球版本號。
5. SVN的工作區和版本庫是截然分開的,而GIT的:
工作區和版本庫是如影隨形的。SVN的企業級部署中,版本庫在服務器上,工作區是一份版本庫在某個歷史狀態下的快照。GIT的根目錄有一個.git的子目錄,這個子目錄就是版本庫本身。
5 配置庫結構設計
推薦的典型的配置庫結構:
開發庫:項目成員的工作環境,保存正處於開發/變更的工作產品(文檔/源代碼)。開發庫內的工作產品處於存檔控制/版本控制之下,其信息可能進行頻繁的修改
受控庫:保存開發過程中某個階段工作結束時釋放的階段產品,即配置項的基准版本。受控庫的配置項處於基准控制下
產品庫:保存對內/對外發布的產品,等待外部測試組測試,或者等待用戶安裝和驗收,產品庫的配置項處於基准控制下
在現實操作中,開發庫一般分為開發庫(DevelopLibrary)和管理庫(ManagementLibrary),受控庫一般稱為基准庫(BaselineLibrary),產品庫一般稱為發布庫(ReleaseLibrary)/產品庫(ProductLibrary),他們的具體組成和作用如下:
【管理庫(ManagementLibrary)】:存放各種管理類文檔
01.項目計划(ProjectPlaning):存放計划類相關文檔如項目管理計划、進度計划、評審計划等
02.項目管理(ProjectManagement):存放項目度量、管理類報告如周報、月報等
01.軟件估算(SoftwareEstimate):存放軟件估算表等
02.周報(WeeklyReport):存放項目周報
03.里程碑報告(MiletoneReport):存放項目里程碑報告
04.決策分析報告(DecisionAnalysisReport):存放項目決策分析報告
05.外部報告(ExternalReport):存放針對外部人員(如客戶)的報告
03.質量保證(QualityAssurance):存放質量保證計划等質量保證相關內容
01.周報(QAWeeklyReport):存放項目QA周報
02.審計記錄(QAAuditRecord):存放QA審計記錄
04.配置管理(ConfigurationManagement):存放配置管理計划等配置管理相關內容
01.配置周報(CMWeeklyReport):存放配置管理周報
02.基准申請(BaselineRequest):存放各種基准建立申請
03.變更申請(ChangeRequest):存放各種基准變更申請
05.評審管理(ReviewManagement):存放評審管理相關內容
01.評審通知(ReviewNotify):存放評審通知
02.評審記錄(ReviewRecord):存放評審記錄
03.評審分析(ReviewAnalyse):存放評審結果分析
06.項目培訓(ProjectTraining):存放項目培訓相關內容
01.培訓教材(TrainingMaterial):存放各類培訓教材
02.培訓記錄(TrainingRecord):存放培訓記錄、簽到表等
07.項目總結(ProjectSummary):存放項目總結相關內容
01.里程碑總結(MileoneSummary):存放項目里程碑總結
02.結項總結(ClosingSummary):存放項目結項總結
03.個人總結(PersonalSummary):存放項目成員個人總結(結項后)
08.缺陷預防(DefectPrevention):
01.檢查表(CheckList):存放各類檢查表
02.檢查結果(CheckResult):存放各類檢查表的檢查結果
09.會議記錄(MeetingRecord):存放各類會議記錄
【開發庫(DevelopLibrary)】:存放項目開發過程中的工作產品
01.需求分析(RequirementAnalyse):存放需求分析文檔、原型頁面等
02.系統設計(SystemDesign):存放系統設計文檔等
03.系統測試(SystemTest):存放系統測試計划、方案、用例等
04.概要設計(PreliminaryDesign):存放概要設計文檔等
05.集成測試(IntegrationTest):存放集成測試計划、方案、用例等
06.詳細設計(DetailDesign):存放詳細設計文檔等
07.單元測試(UnitTest):存放單元測試設計、結果等
08.系統代碼(SystemCode):存放系統代碼
09.確認測試(AssuranceTest):存放確認測試計划、用例、結果等
10.用戶手冊(UserManuals):存放用戶手冊等
11.支持工具(SupportTools):存放項目使用到的支持工具,如PowerDesigner、SQLManager等
12.外部產品(ExternalProducts):存放項目使用到的外部組件,如extjs等
13.其它(Other):存放開發過程中的其他工作產品
【基准庫(BaselineLibrary)】:存放基准化的工作產品,內容可參照開發庫中的說明
01.項目計划(ProjectPlaning):存放基准化的計划類相關文檔如項目管理計划、進度計划、評審計划等
02.需求分析(RequirementAnalyse):存放基准化的需求分析文檔、原型頁面等
03.系統設計(SystemDesign):存放基准化的系統設計文檔等
04.系統測試(SystemTest):存放基准化的系統測試計划、方案、用例等
05.概要設計(PreliminaryDesign):存放基准化的概要設計文檔等
06.集成測試(IntegrationTest):存放基准化的集成測試計划、方案、用例等
07.詳細設計(DetailDesign):存放基准化的詳細設計文檔等
08.單元測試(UnitTest):存放基准化的單元測試設計、結果等
09.系統代碼(SystemCode):存放基准化的系統代碼
10.確認測試(AssuranceTest):存放基准化的確認測試計划、用例、結果等
11.用戶手冊(UserManuals):存放基准化的用戶手冊等
12.支持工具(SupportTools):存放基准化的項目使用到的支持工具,如PowerDesigner、SQLManager等
13.外部產品(ExternalProducts):存放基准化的項目使用到的外部組件,如extjs等
【發布庫(ReleaseLibrary)】:存放待發布/已發布的產品
01.內部發布(InternalRelease):存放待發布/已發布發給內部客戶(一般為測試部門)的工作產品
02.外部發布(ExternalRelease):存放待發布/已發布發布給外部客戶(一般為合同方/最終用戶)的工作產品