git 是一個免費的、開源的分布式版本控制系統,可以快速高效地處理從小型到大型的各種項目。
git 易于學習,占地面積小,性能極快。它具有廉價的本地庫,友善的暫存區域和多個工作流分支等特性。其性能優于 subversion、cvs、perforce 和 clearcase 等版本控制工具
版本控制是一種記錄檔案内容變化,以便将來查閱特定版本修訂情況的系統。
版本控制其實最重要的是可以記錄檔案修改曆史記錄,進而讓使用者能夠檢視曆史版本,友善版本切換。
個人開發過渡到團隊協作
(1)集中式版本控制工具
cvs、svn(subversion)、vss……集中化的版本控制系統諸如 cvs、svn 等,都有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過用戶端連到這台伺服器,取出最新的檔案或
者送出更新。多年以來,這已成為版本控制系統的标準做法。
這種做法帶來了許多好處,每個人都可以在一定程度上看到項目中的其他人正在做些什麼。而管理者也可以輕松掌控每個開發者的權限,并且管理一個集中化的版本控制系統,要
遠比在各個用戶端上維護本地資料庫來得輕松容易。
事分兩面,有好有壞。這麼做顯而易見的缺點是中央伺服器的單點故障。如果伺服器當機一小時,那麼在這一小時内,誰都無法送出更新,也就無法協同工作。
(2)分布式版本控制工具
git、mercurial、bazaar、darcs……像 git 這種分布式版本控制工具,用戶端提取的不是最新版本的檔案快照,而是把代碼倉庫完整地鏡像下來(本地庫)。這樣任何一處協同工作用的檔案發生故障,事後都可以用
其他用戶端的本地倉庫進行恢複。因為每個用戶端的每一次檔案提取操作,實際上都是一次對整個檔案倉庫的完整備份
總結:分布式的版本控制系統出現之後,解決了集中式版本控制系統的缺陷:
1. 伺服器斷網的情況下也可以進行開發(因為版本控制是在本地進行的)
2. 每個用戶端儲存的也都是整個完整的項目(包含曆史記錄,更加安全)
(1)基本文法
(2)執行個體實操
全局範圍的簽名設定:
說明:
(1)簽名的作用是區分不同操作者身份。使用者的簽名資訊在每一個版本的送出資訊中能夠看到,以此确認本次送出是誰做的。git首次安裝必須設定一下使用者簽名,否則無法送出代碼。
(2)這裡設定使用者簽名和将來登入 github(或者其他代碼托管中心)的賬号沒有任何關系。
(2)案例實操
(3)結果檢視
(2)執行個體操作
3.3.1 首次檢視(工作區沒有任何檔案)
3.3.2 新增檔案
3.3.3 再次檢視(檢測到未追蹤的檔案)
3.4.1 将工作區的檔案添加到暫存區
3.4.2 檢視狀态(檢測到暫存區有新檔案)
注意:可以使用指令 git rm --cached hello.txt 删除暫存區檔案,但是這個删除隻是删除暫存區的檔案,工作區的檔案還是存在的,執行該指令之後再次執行git status 發現又變成紅色了
3.5.1 将暫存區的檔案送出到本地庫
3.5.2 檢視狀态(沒有檔案需要送出)
注意:
(1)可以使用指令 git reflog 檢視版本資訊
(2)可以使用指令 git log 檢視詳細日志
3.6.1 檢視狀态(檢測到工作區有檔案被修改)
3.6.2 将修改的檔案再次添加暫存區
3.6.3 檢視狀态(工作區的修改添加到了暫存區)
3.6.4 将暫存區的檔案送出到本地庫
3.6.5 檢視狀态(沒有檔案需要送出)
(2)執行個體操作
git reset --hard 版本号
(a)首先檢視目前的曆史記錄,可以看到目前是在 23f10bc 這個版本
(b)切換到 7330622 版本,也就是我們第一次送出的版本
(c)切換完畢之後再檢視曆史記錄,目前成功切換到了 7330622 版本
(d)然後檢視檔案 hello.txt,發現檔案内容已經變化
git切換版本,底層其實是移動的 head 指針,具體原理如下圖所示
在版本控制過程中,同時推進多個任務,為每個任務,我們就可以建立每個任務的單獨分支。使用分支意味着程式員可以吧把自己的工作從開發主線上分離開來,開發自己分支的時候,不會影響主線分支的運作。對于初學者來說,分支可以了解為副本,一個分支就是一個單獨的副本。(分支底層其實也是指針的引用)
同時并行推進多個功能開發,提高開發效率
各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任何影響。失敗的分支删除重新開始即可。
(2)案例實操
(1)在master分支上做修改
(2)添加暫存區
(3)送出本地庫
(4)檢視分支
(5)檢視master分支上的檔案内容
發現目前分支已經由master改為hot-fix
下面,檢視hot-fix分支上的檔案内容發現與master分支上的内容不同
在hot-fix分支上做修改
添加暫存區
送出本地庫
在master分支上合并hot-fix分支
沖突産生的表現:後面狀态為 merging
沖突産生的原因:
合并分支的時候,兩個分支在同一個檔案的同一個位置有兩套完全不同的修改。git無法替我們決定使用哪一個。必須認為決定信貸買内容。
檢視狀态(檢測到檔案有兩處修改)
(1)編輯有沖突的檔案,删除特殊符号,決定要使用的内容
特殊符号:<<<<<<< head 目前分支的代碼 ======= 合并過來的代碼 >>>>>>> hot-fix
(2)添加到暫存區
(3)執行送出(注意:此時使用git commit 指令時不能帶檔案名)
發現後面的 merging 消失,變為正常
master、hot-fix 其實都是指向具體版本記錄的指針。目前所在的分支,其實是由 head決定的。是以建立分支的本質就是多建立一個指針。
head 如果指向 master,那麼我們現在就在 master 分支上。
head 如果執行 hotfix,那麼我們現在就在 hotfix 分支上。
是以切換分支的本質就是移動 head 指針。
github 網址:https://github.com/
注冊三個賬号測試
建立完畢後
(2)示例操作
(2)示例操作
其間,彈出下面的頁面,關于personal access token的生成後面介紹
此時,我們發現已經将我們的master分支上的内容推送到 github 建立的遠端倉庫。
注意:本人操作之前先删除了本地的憑據管理器,發現克隆的時候不用登入任何賬号
克隆結果:初始化本地倉庫
檢視一下遠端倉庫别名
結論:clone會做如下操作
(1)拉取代碼
(2)初始化本地倉庫
(3)建立别名
(1)選擇邀請合作者
(2)填入想要合作的人
(3)複制位址并通過微信釘釘等方式發送給該使用者,複制内容如下:
https://github.com/hrch001/git-shtest.git
(4)在hrch002這個賬号中的位址欄複制收到邀請的連結,點選接收邀請
(5)成功之後可以在 hrch001 這個賬号上看到 git
(1)eclipse 特定檔案
(2)idea 特定檔案
(3)maven 工程的 target 目錄
選擇要建立 git 本地倉庫的工程
發現出現了 .git 檔案,并且 pom.xml 變成紅色,說明該檔案未添加到暫存區
右鍵點選項目選擇 git—>add将項目添加到暫存區
添加完成之後變成綠色了
在 idea 的左下角,點選 version control,然後點選 log 檢視版本
右鍵選擇要切換的版本,然後在帶單裡面點選 checkout revision。
衆所周知,github 伺服器在國外,使用 github 作為項目托管網站,如果網速不好的話,嚴重影響使用體驗,甚至會出現登入補上的情況。針對這個情況,大家可以使用國内的項目托管網站—碼雲。
碼雲是開源中國推出的基于 git 的代碼托管服務中心,網址是 https://gitee.com/ ,使用方式跟 github 一樣,而且它還是一個中文網站。
進入碼雲官網位址:https://gitee.com/,點選注冊 gitee
輸入個人資訊,進行注冊即可。
帳号注冊成功以後,直接登入。
點選首頁右上角的加号,選擇下面的建立倉庫
idea 預設不帶碼雲插件,我們第一步要安裝 gitee 插件。
如圖所示,在 idea 插件商店搜尋 gitee,然後點選右側的 install 按鈕。
官網位址:https://about.gitlab.com/
安裝說明:https://about.gitlab.com/installation/
10.3.1 伺服器準備
10.3.2 安裝包準備
yum 線上安裝 gitlab- ce 時,需要下載下傳幾百 m 的安裝檔案,非常耗時,是以最好提前把所需 rpm 包下載下傳到本地,然後使用離線 rpm 的方式安裝。
下載下傳位址:
https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
注:資料裡提供了此 rpm 包,直接将此包上傳到伺服器/opt/module 目錄下即可。
10.3.3 編寫安裝腳本
安裝 gitlab 步驟比較繁瑣,是以我們可以參考官網編寫 gitlab 的安裝腳本。
腳本内容
給腳本增加執行權限
然後執行該腳本,開始安裝gitlab-ce。注意:一定要保證伺服器 可以上網
10.3.4 初始化 gitlab 服務
執行以下指令初始化 gitlab 服務,過程大概需要幾分鐘,耐心等待…
10.3.5 啟動 gitlab服務
執行以下指令啟動 gitlab 服務,如需停止,執行 gitlab-ctl stop
10.3.6 使用浏覽器通路 gitlab
使用主機名或者 ip 位址即可通路 gitlab 服務。需要提前配一下 windows 的 hosts 檔案
10.3.7 gitlab 建立遠端庫
10.3.8 idea 內建 gitlab