淺談軟件配置管理工具(github & SVN)


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):存放待發布/已發布發布給外部客戶(一般為合同方/最終用戶)的工作產品

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM