1. 程式人生 > >軟工 實驗一 Git程式碼版本管理

軟工 實驗一 Git程式碼版本管理

實驗目的:

1)瞭解分散式版本控制系統的核心機理;

2)   熟練掌握git的基本指令和分支管理指令;

實驗內容:

1)安裝git

2)初始配置git ,git init git status指令

3)掌握git log ,git add ,git diff 指令

4) 掌握git tag git branch,git commit 指令

5)掌握git revert 指令

實驗記錄:

1)實驗內容以及結果的截圖:

2)實驗過程中發生的問題與解決。

1.安裝git與初始配置

配置使用者名稱,郵箱,以及確保 Git 輸出內容帶有顏色標記。與程式碼編輯器Sublime 進行連結。

2.從頭建立倉庫 

   2.1建立專案目錄

建立一個目錄: se2020-git-course,在該目錄中,建立另一個目錄: new-git-project,使用 cd 命令移到 new-git-project 目錄下。

執行git init,在當前目錄下生成一個空的Git倉庫。

 

 

 

   2.2克隆現有倉庫

輸入命令 git clone,然後輸入你要克隆的 Git 倉庫的路徑。本次實驗路徑為 :https://github.com/udacity/course-git-blog-project 。

 

     2.3判斷倉庫現有狀態

git status 是瞭解 Git 的核心所在。它將告訴我們 Git 正在考慮什麼,以及 Git 所看到的我們倉庫的狀態。

 

 

思考:如何證明庫尚無任何commit.

執行git log,結果如下:

3.git log 命令

 git log 命令用於顯示倉庫中所有 commit 的資訊。預設情況下該命令會顯示倉庫中每個 commit 的:SHA、作者、日期、訊息

 

   3.1git log --oneline命令

 git log --oneline,可以用來更改倉庫資訊的顯示方式。

 

  3.2git log --stat命令

 git log --stat,用來顯示 commit 中更改的檔案以及新增或刪除的行數。

此命令會:1.顯示被修改的檔案

                  2.顯示新增/刪除的行數

                  3.顯示一個摘要,其中包含修改/刪除的總檔案數和總行數

 

 3.3git log -p 命令

git log -p 命令可用來顯示對檔案作出實際更改的命令。

此命令會:1.顯示被修改的檔案

                        2.顯示新增/刪除的行所在的位置

                        3.顯示做出的實際更改

  

 

 3.4git show 命令

僅顯示一個特定的commit,方便查閱。

 

 4.git add& git commit&git diff

4.1建立HTML檔案,檔名為index.html,並新增一些初始程式碼。

建立js和css資料夾,並在資料夾下分別建立app.js和app.css檔案,檔案內容可為空。

輸入git status 檢視狀態

 

4.2git add

將index.html新增到暫存區,並利用 git status檢視

 

 

 顯示index.html被成功加入到暫存區。

再暫存另外兩個檔案。現在我們可以執行以下命令:

$ git add css/app.css js/app.js

或者使用 git add .   ( 句點指代當前目錄,可以用來表示所有檔案和目錄(包括所有巢狀檔案和目錄!))。

 

 

4.3 git commit

要在 git 中提交 commit,你需要使用 git commit 命令,但是先別執行這條命令。執行這條命令將會開啟你在第一節課配置的程式碼編輯器。

 

 4.4 使用 -m 選項繞過編輯器

在index.html 中的body標記中加入

<header>  

<h1><Expedition></h1>

</header>

執行git status

 

將index.html 檔案新增到暫存區,並執行git status檢視是否已經儲存。

 

 使用 git commit 命令提交 commit,並新增提交說明 Add header to blog。

 

 

然後執行git log 檢視剛剛提交的commit 說明。

 

 

4.5git diff

 此工具可以在進行提交之前告訴我們已對檔案進行了什麼樣的更改。

用git diff 命令來檢視已加入但是尚未提交的更改。在index.html中將標題改為Adventure,儲存後在終端上執行git diff。

 

 

4.6  .gitignore

如果你想將某個檔案保留在專案的目錄結構中,但是確保它不會意外地提交到專案中,可以使用名稱特殊的檔案 .gitignore

(注意檔名開頭的點,很重要!)。

在目錄下新建word 資料夾project.docx.當執行git status 時會出現在檔案目錄上。

 

 此時在檔案new-git-project檔案中新增 .gitignore 檔案,並在檔案中新增 project.docx,再次執行git status 將不會再出現

在檔案目錄中。

 5. 標籤與分支

5.1git tag 命令

進入,前面建立的 new-git-project 專案資料夾中。

5.1.1建立標籤

使用 git tag 命令與倉庫的標籤進行互動,輸入以下命令 :git tag -a v1.0

 

 

 

 5.1.2 驗證標籤

儲存並退出編輯器後,命令列上什麼也不會顯示。只需輸入 git tag,命令列會顯示倉庫中的所有標籤。

 

 然後執行 git log 檢視標籤的位置

 

5.1.3刪除標籤

可以通過輸入 -d 選項 (表示 delete 刪除!)加上標籤名稱來刪除 git 標籤:git tag -d v1.0

 

 

 5.1.4向以前的 commit 新增標籤

執行 git tag -a v1.0 將為最近的 commit 新增標籤。

或提供要新增標籤的 commit 的 SHA ,可以通過查詢歷史SHA git log --oneline,查詢已經commit  的SHA。

 

 輸入 git tag -a v1.0 4d87b86新增標籤

 

 5.2git branch 分支

5.2.1 git branch 命令用來與 git 的分支進行互動:列出倉庫所有的分支名稱,建立新的分支,刪除分支。

 

 5.2.2建立分支

要建立分支,只需使用 git branch 並提供要建立的分支對應的名稱。因此,如果你想建立一個叫做"sidebar"的分支,

只需執行以下命令:gti branch sidebar

 

但是當前分支仍然是master.

使用 git checkout命令你切換分支。

 

使用 git log --oneline檢視。

 

 5.2.3活躍分支

判斷活躍分支的最快速方式是檢視 git branch 命令的輸出結果。活躍分支名稱旁邊會顯示一個星號。

 

 5.2.4刪除分支

首先切換掉想要刪除的分支,確保其不是當前分支,例如sidebar。

使用git checkout master命令。

 

 

 然後在使用 git branch -d sidebar命令刪除sidebar 分支。

刪除提示:

1)如果某個分支上有任何其他分支上都沒有包含的 commit(也就是這個 commit 是要被刪除的分支獨有的),git 不會刪除該分支。

2)如果你建立了 sidebar 分支,向其添加了 commit,然後嘗試使用 git branch -d sidebar 刪除該分支,git 不會讓你刪除該分支,

因為你無法刪除當前所在的分支。

3)如果你切換到 master 分支並嘗試刪除 sidebar 分支,git 也不會讓你刪除,因為 sidebar 分支上的新 commit 會丟失!要強制刪除,

你需要使用大寫的 D 選項 - git branch -D sidebar

 

5.3 高效分支

前期準備

 

5.3.1分支實戰 

更改 1 - 新增頁面顏色,確保位於 master 分支上,並向 css/app.css 新增以下內容:

 

更改 2 - 新增側欄,我們向頁面上新增一個側欄

 先使用命令 git log --oneline 檢視commit。在輸入git branch sidebar 4d87b86,向該commit新增分支。

最後切換到sidebar分支後,會發現之前在master中新增的 Set background color for page沒有了 。

 

新增html檔案

 

更改 3 - 更改 master 上的標題,切換到 master 分支並更新頁面標題。

切換分支

 

 儲存 index.html 檔案並進行 commit 以將此更改新增到倉庫中。

 

 同時檢視所有分支:git log --oneline  --graph --all

 

 6.合併

將分支組合到一起稱為合併

6.1合併指令

git merge 指令用來合併 git 分支:

 

 6.2合併衝突

首先人為製造衝突。

更改master標籤,並commit儲存。

 

 建立一個heading-update分支,使用git --oneline --graph --all檢視,

 

儲存heading-update commit。合併分支發生衝突。

 

 

 執行git status檢視

 

 修改index.html解決衝突

 

 7.撤銷更改

7.1更改最後一個 commit,git commit --amend

 

 7.2 還原commit :  git revert <SHA-of-commit-to-revert>

 

 7.3重置

git reset 命令

git reset 命令用來重置(清除)commit: git reset <reference-to-commit>

git reset 的選項

git 根據所使用選項來判斷是清除、暫存之前 commit 的更改,還是取消暫存之前 commit 的更改。這些選項包括:

  • 使用 --hard 選項清除 commit

  • 使用 --soft 選項將 commit 的更改移至暫存區

  • 使用 --mixed 選項取消暫存已被 commit 的更改 

 

 

 

 7.4備份分支

先建立一個分支用來備份 :git branch backup

 

 

 

 

 總結與體會:

       因為以前對GIT從未有過任何瞭解,所以剛開始時根本無從下手,起初配置軟體時,還不知道軟甲的用處,在配置過程中就遇到了很多麻煩,經過網上查閱資料才對GIT有了進一步的瞭解,在完成配置後,根據實驗你步驟的指導起初一步步的操作感覺還不是很難,因為剛開始還是很順利的,但是在做到需要更換上一級檔案目錄時出現了問題,不知道需要用什麼命令返回上一級目錄,進故宮查閱資料,利用 cd ..\, 然後會彈出  >,這是直接回車即可返回上一級目錄。在後來的操作中因為第一次使用GIT,實驗過程一路磕磕絆絆,才得以完成,在解決合併衝突,人為製造合併衝突時,同樣遇到了麻煩,經歷了好幾次的摸索,最後得以解決,其中heading-up的分支commit 為上一個的分支的,隨機一個commit ,而我在實驗中使用了與master更改時相同的commit ,導致無法產生衝突。

    經過這次實驗對GIT有了初步的認識與瞭解,對GIT軟體的使用,以及GIT的語法命令有了更進一步的掌握,對建立倉庫,新增commit,修改commit其中git status,git log --oneline.在對GIT的使用中起到很大作用,對編譯者很友好,可以方便查詢狀態資訊。

      

思考題:

  閱讀維基百科和百度百科的Git詞條,總結分散式版本控制系統的核心機理

  答:Git是一個開源的分散式版本控制系統,可以有效、高速地處理從很小到非常大的專案版本管理。Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。分散式版本控制系統是一種有效、高速地處理從很小到非常大的專案版本管理系統。與它相對的是集中式版本控制系統。在分散式版本控制系統中客戶端並不像集中式版本控制系統那樣提取最新版本的檔案快照,而是把程式碼倉庫完整地映象下來。這樣的核心機理就輕鬆的解決了集中式版本控制系統中容易出現的也是很致命的中央伺服器單點故障。分散式版本控制系統沒有所謂的"中央伺服器",每個人的電腦上都是一個完整的版本

庫。通常分散式版本控制系統有一臺"偽中央伺服器",但是這個伺服器的作用僅僅是用來方便"交換"大家的修改,沒有它大家仍然可以正常工作。

&n