1. 程式人生 > >版本管理工具介紹—Git篇

版本管理工具介紹—Git篇

一.版本管理工具作用

主要講解了git在各平臺的安裝和基本使用,Git能夠幫助我們解決檔案的提交、檢出、回溯歷史、衝突解決、多人協作模式等問題,並且大大提升我們的工作效率。

版本管理工具是幹什麼的?
1.備份檔案
2.歷史記錄
3.回到過去
4.多端共享
5.團隊協作

二.版本管理工具發展歷史

這裡寫圖片描述

三.建立一個新的專案

1.新建專案
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

選擇公共專案或者私人專案

這裡寫圖片描述

是否需要建立readMe檔案,我們選擇需要,我們可以在這個檔案中寫一些專案描述和修改項

這裡寫圖片描述

這是檢出專案按鈕,我們可以通過 “Open in Desktop”按鈕,直接開啟電腦客戶端的gitHub

這裡寫圖片描述

也可以通過“Download ZIP”按鈕,下載專案的壓塑包到本地。

我們也可以通過命令列進行操作

這裡寫圖片描述

這裡寫圖片描述
地址我們在這裡複製

四.第一次提交專案

這裡寫圖片描述

命令: vi 日記 —建立日記檔案
編輯完畢後,輸入 : ,然後輸入wq儲存

然後,我希望將建立的檔案,提交到版本管理工具中

我先用命令:git status 檢視一下工作區的狀態
這裡寫圖片描述
我們可以看到git提示我們,有未跟蹤的檔案,讓我們使用
命令:git add 建立跟蹤

這裡寫圖片描述

然後看到git提示:可以使用”git reset …“撤出暫存區,但是我們要做的是提交,不需要執行撤銷的命令。

使用命令:git commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
#       new file:   日記
#
# Changes not staged for commit:
#       modified:   README.md

我們看到git要讓我們填寫變更的提交說明,目的是讓我們方便在以後檢視歷史時,知道當時修改的目的是什麼。

我們輸入說明,然後輸入 “:wq”儲存退出

bogon:WeChat-applet mac$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   日記

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md

bogon:WeChat-applet mac$ git commit
[master e0c8211] 我新加了一個日記檔案
 1 file changed, 1 insertion(+)
 create mode 100644 日記
bogon:WeChat-applet mac$ 

這裡寫圖片描述

我們使用命令git push提交,然後輸入git註冊的使用者名稱和密碼,然後顯示提交成功!

然後我們再次輸入命令:git status,我們可以看到git告訴我們:無檔案要提交,乾淨的工作區
這裡寫圖片描述

然後,我們進入gitHub的專案主頁,重新整理一次,就能看到新建立的檔案。

這裡寫圖片描述

點選日記,進入“日記”專案主頁

這裡寫圖片描述

點選按鈕,可以直接開啟電腦客戶端,進行專案檢出

這裡寫圖片描述

這裡寫圖片描述

然後,我們點選 “show in finder”按鈕,開啟本地檔案

這裡寫圖片描述

開啟日記檔案,並新增新的文字,儲存。

這裡寫圖片描述

開啟客戶端,我們可以看到新修改的內容。

這裡寫圖片描述

點選Commit to master 按鈕,再點選“Push origin”按鈕,同步到線上

進入網頁專案主頁,重新整理,我們可以看到我們修改的檔案,已經同步到了專案中。
這裡寫圖片描述

五.和其他小夥伴一起使用

1.關於程式碼衝突—解決衝突

這裡寫圖片描述

我們建立WeChat-applet2專案,模擬兩個人同時提交專案

這裡寫圖片描述
分別修改日記檔案內容,同時提交

這裡寫圖片描述

這裡寫圖片描述

修改WeChat-applet檔案下的日記成功!

然後修改WeChat-applet2檔案下的日記:
這裡寫圖片描述

這裡寫圖片描述
此時,git會丟擲一個異常

錯誤:編輯器“vi”出現問題。
請使用-m或-F選項提供訊息。
bogon:WeChat-applet2 mac $ git push
到https://github.com/Goddreamwt/WeChat-applet.git
 ! [拒絕]主人 - >主人(取第一人)
錯誤:未能推動一些裁判'https://github.com/Goddreamwt/WeChat-applet.git'
提示:更新被拒絕,因為遠端包含您所做的工作
提示:沒有本地。 這通常是由另一個儲存庫推送引起的
提示:對同一個參考。 您可能需要先整合遠端更改
提示:(例如,'git pull ...'),然後再次推送。
提示:有關詳細資訊,請參閱“git push --help”中的“關於快速轉發的注意事

git建議我們使用git pull把程式碼拉下來,解決衝突,再次提交。

這裡寫圖片描述

https://github.com/Goddreamwt/WeChat-applet.git
 ! [拒絕]主人 - >主人(取第一人)
錯誤:未能推動一些裁判'https://github.com/Goddreamwt/WeChat-applet.git'
提示:更新被拒絕,因為遠端包含您所做的工作
提示:沒有本地。這通常是由另一個儲存庫推送引起的
提示:對同一個參考。您可能需要先整合遠端更改
提示:(例如,'git pull ...'),然後再次推送。
提示:有關詳細資訊,請參閱“git push --help”中的“關於快速轉發的注意事項”。
bogon:WeChat-applet2 mac $ git pull
遠端:計數物件:3,完成。
遠端:壓縮物件:100%(3/3),完成。
遠端:共3(delta 0),重用3(delta 0),包重用0
開箱物件:100%(3/3),完成。
從https://github.com/Goddreamwt/WeChat-applet
   a987b26..9249f2e master - > origin / master
更新a987b26..9249f2e
錯誤:對以下檔案的本地更改將被合併覆蓋:
日記
請在合併之前提交您的更改或隱藏它們。
中止

此時,我們發現git幫助我們合併了兩個有衝突的檔案。

bogon:WeChat-applet2 mac$ git pull
Auto-merging 日記
CONFLICT (content): Merge conflict in 日記
Automatic merge failed; fix conflicts and then commit the result.

自動合併日記
CONFLICT(內容):合併日記中的衝突
自動合併失敗; 修復衝突,然後提交結果。

這裡寫圖片描述

我們開啟這個檔案,能夠看到它同時保留了兩次修改的記錄

這裡寫圖片描述

然後我們輸入命令:vi 日記,修改合併後的檔案,把它修改成我們第二次想要設定的檔案內容,提交!

這裡寫圖片描述

我們告訴gitHub,我們已經解決了這次衝突。
這裡寫圖片描述

我們可以看到,遠端的版本庫已經更新到了我們第二次提交的內容。

這裡寫圖片描述

然後我們返回第一個檔案,檢視本地日記檔案,發現仍然是原來的內容
這裡寫圖片描述

所以我們使用 命令:git pull,把第一個檔案也更新到和遠端庫一樣的內容
這裡寫圖片描述

到這裡,就使”第一個人”的原生代碼,”第二個人”的原生代碼,和線上的程式碼都統一了。完成了一次衝突的解決!

六.如何回到過去

這裡寫圖片描述

首先,我們先用命令:git log 檢視專案的操作記錄

這裡寫圖片描述

然後複製我們要回到的操作的commit碼

然後我們使用 命令:git reset –hard b3aab91a614f245faa8b06a4b700dc826a6e02bd

hard表示指標,是程式碼回到這個指標指向的時間點的狀態
這裡寫圖片描述

這裡寫圖片描述

使用命令:git reflog ,會列出我們當前的版本之前的版本號

使用命令: git reset –hard b26902e(回溯過去版本號到現在時間的操作版本號)

我們又恢復到回溯之前的程式碼。

七,建立里程碑

這裡寫圖片描述

我們回到專案首頁,點選 release

這裡寫圖片描述

點選 “create a new release”按鈕

這裡寫圖片描述

此時,這個介面就是建立里程碑的介面

這裡寫圖片描述

點選 “publish release”按鈕,我們就建立了一個里程碑

這裡寫圖片描述

我們可以看到建立的release版本,如果我們的專案是開源的話,別人可能就會根據我們的release版本,下載完整專案。

八,分支開發之分支合併

什麼情況下進行分支開發呢?比如:昨天我們軟體釋出了一個新的版本,但是出現一個BUG,需要馬上進行修復。但是我們的master分支,也就是我們預設的分支,已經推送了新的功能的程式碼,所以我們不能再master分支上立刻進行釋出。如果釋出的話,就可能把那些沒進行過測試的程式碼帶到外面去,引發更嚴重的問題,此時我們就有必要建立一個新的分支。用釋出的版本為基礎的情況下,修改BUG完畢再同步到正在開發中的分支上。這樣就可以不考慮現有的開發進度的情況下,把這個BUG解決掉。

首先開啟我們的客戶端
這裡寫圖片描述

選擇 master下拉框

這裡寫圖片描述

點選 new ,新建一個分支。

分支名稱起名叫 bug,點選確認
這裡寫圖片描述

此時,我們可以看到current Branch 下面顯示的是 bug分支,此時,我們就完成了一個新的分支的建立,此時我們本地的環境就已經切換到了新的分支當中了。

此時,我們show in finder,找到 日記 檔案,開啟並修改

這裡寫圖片描述

關閉,儲存。

這裡寫圖片描述

點選 commit to bug 按鈕,提交。

然後,我們如何把新修改的程式碼合併到master分支的程式碼中呢?

這裡寫圖片描述

首先我們切換到master分支當中

這裡寫圖片描述

表示,我們要把bug分支當中存在,master當中的分支不存在的程式碼,默置到master分支當中。

這裡寫圖片描述

此時,master分支當中,就出現了bug分支修復的程式碼。

九,分支開發之合併到master

除了上面的合併分支的方式以外,我們還有另外一種方式,這種方式可能更適合開源軟體的合併。

跟上面一樣,show in finder,修改日記檔案內容,關閉,儲存。

上傳修改結果。

然後

這裡寫圖片描述

在網頁的gitBub上開啟。

這裡寫圖片描述

這裡寫圖片描述

點選“crate pull requeast”

這裡寫圖片描述

這裡寫圖片描述

10,關於多人合作的一些經驗

1.多用客戶端和工具,少用命令列,除非是在Linux伺服器上直接開發。
2.每次提交前,diff自己的程式碼,以擴音交錯誤的程式碼。
3.下班回家前,整理好自己的工作區。
4,並行的專案,使用分支開發。
5,遇到衝突時,搞明白衝突的原因,千萬不要隨意丟棄別人的程式碼。
6.產品釋出後,記得打tag,方便將來拉分支修復bug