目錄linux
Git誕生歷史 git
Git環境準備github
Git安裝部署web
Git經常使用命令算法
Git基本操做數據庫
Git管理分支結構安全
Git管理標籤服務器
GitLab安裝部署網絡
GitHub託管服務app
Git客戶端工具
1
Git誕生歷史
我 想你們還記得Linus torvalds在1991年時發佈了Linux操做系統吧,從那之後Linux系統變不斷髮展壯大,由於Linux系統開源的特性,因此一直接受着來自 全球Linux技術愛好者的貢獻,志願者們經過郵件向Linus發送着本身編寫的源代碼文件,而後由Linus本人經過手工的方式將代碼合併,但這樣不只 沒有效率,並且真的是太痛苦了。
一 直到2002年,Linux系統通過十餘年的不斷髮展,代碼庫已經龐大到沒法再讓Linus經過手工的方式管理了,可是Linus真的很不喜歡CVS或者 Subversion版本控制系統,因而商業公司BitMover決定將其公司的BitKeeper分佈式版本控制系統受權給Linux開發社區來免費使 用,當時的BitKeeper能夠比較文件內容的不一樣,還可以將出錯的文檔還原到歷史某個狀態,Linus終於放下了內心的石頭。
分佈式版本控制流程圖
CVS和Subversion屬於傳統的版本控制系統,而分佈式版本控制系統最大的特色是不須要每次提交都把文件推送到版本控制服務器,而是採用分佈式版本庫的機制,使得每一個開發人員都夠從服務器中克隆一份完整的版本庫到本身計算機本地,沒必要再徹底依賴於版本控制服務器,而且由於數據都在本身本地,不只效率提升了,並且即使咱們離開了網絡依然能夠執行提交文件、查看歷史版本記錄、建立分支等等操做,真的是開發者的福音啊。
就 這樣平靜的度過了三年時間,可是Linux社區彙集着太多的黑客人物,2005年時,那位曾經開發Samba服務程序的Andrew由於試圖破解 BitKeeper軟件協議而激怒了BitMover公司,立即決定再也不向Linux社區提供免費的軟件受權了,此時的Linus其實也早已有本身編寫分 布式版本控制系統的打算了,因而便用C語言花了2周建立了Git分佈式版本控制系統,並上傳了Linux系統的源代碼。
git_logo
Git 不只是一款開源的分佈式版本控制系統,並且有其獨特的功能特性,例如大多數的分佈式版本控制系統只會記錄每次文件的變化,說白了就是隻會關心文件的內容變 化差別,而Git則是關注於文件數據總體的變化,直接會將文件提交時的數據保存成快照,而非僅記錄差別內容,而且使用SHA-1加密算法保證數據的完整 性。
Git爲了提升效率,對於沒有被修改的文件,則不會重複存儲,而是建立一個連接指向以前存儲過的文件。
git提交流程圖
在正式使用前,咱們還須要弄清楚Git的三種重要模式,分別是已提交、已修改、已暫存。
已提交(committed):表示數據文件已經順利提交到Git數據庫中。
已修改(modified):表示數據文件已經被修改,但未被保存到Git數據庫中。
已暫存(staged):表示數據文件已經被修改,並會在下次提交時提交到Git數據庫中。
提交前的數據文件可能會被隨意修改或丟失,但只要把文件快照順利提交到Git數據庫中,那就能夠徹底放心了,流程爲:
在工做目錄中修改數據文件。
將文件的快照放入暫存區域。
將暫存區域的文件快照提交到Git倉庫中。
git工做模式
2
Git環境準備
3
Git安裝部署
Git 是分佈式的版本控制系統,咱們只要有了一個原始Git版本倉庫,就可讓其餘主機克隆走這個原始版本倉庫,從而使得一個Git版本倉庫能夠被同時分佈到不 同的主機之上,而且每臺主機的版本庫都是同樣的,沒有主次之分,極大的保證了數據安全性,並使得用戶可以自主選擇向那個Git服務器推送文件了,其實部署 一個git服務器是很是簡單的。
4
Git經常使用命令
add #添加文件內容至索引
bisect #經過二分查找定位引入 bug 的變動
branch #列出、建立或刪除分支
checkout #檢出一個分支或路徑到工做區
clone #克隆一個版本庫到一個新目錄
commit #記錄變動到版本庫
diff #顯示提交之間、提交和工做區之間等的差別
fetch #從另一個版本庫下載對象和引用
grep #輸出和模式匹配的行
init #建立一個空的 Git 版本庫或從新初始化一個已存在的版本庫
log #顯示提交日誌
merge #合併兩個或更多開發歷史
mv #移動或重命名一個文件、目錄或符號連接
pull #獲取併合並另外的版本庫或一個本地分支
push #更新遠程引用和相關的對象
rebase #本地提交轉移至更新後的上游分支中
reset #重置當前HEAD到指定狀態
rm #從工做區和索引中刪除文件
show #顯示各類類型的對象
status #顯示工做區狀態
tag #建立、列出、刪除或校驗一個GPG簽名的 tag 對象
5
Git基本操做
5.1Git提交數據
咱們能夠簡單的把工做目錄理解成是一個被Git服務程序管理的目錄,Git會時刻的追蹤目錄內文件的改動,另外在安裝好了Git服務程序後,默認就會建立好了一個叫作master的分支,咱們直接能夠提交數據到了
5.2Git移除數據
有些時候會向把已經添加到暫存區的文件移除,但仍然但願文件在工做目錄中不丟失,換句話說,就是把文件從追蹤清單中刪除。
5.3Git移動數據
5.4Git歷史記錄
5.5Git還原數據
此時以爲寫得不妥,想還原某一次提交的文件快照
Git 服務程序中有一個叫作HEAD的版本指針,當用戶申請還原數據時,其實就是將HEAD指針指向到某個特定的提交版本,可是由於Git是分佈式版本控制系 統,爲了不歷史記錄衝突,故使用了SHA-1計算出十六進制的哈希字串來區分每一個提交版本,另外默認的HEAD版本指針會指向到最近的一次提交版本記 錄,而上一個提交版本會叫HEAD^,上上一個版本則會叫作HEAD^^,固然通常會用HEAD~5來表示往上數第五個提交版本。
剛剛的操做實際上就是改變了一下HEAD版本指針的位置,就是你將HEAD指針放在那裏,那麼你的當前工做版本就會定位在那裏,要想把內容再還原到最新提交的版本,先看查看下提交版本號
怎麼搞得?居然沒有了Introduction software這個提交版本記錄?
緣由很簡單,由於咱們當前的工做版本是歷史的一個提交點,這個歷史提交點尚未發生過Introduction software更新記錄,因此固然就看不到了,要是想「還原到將來」的歷史更新點,能夠用git reflog命令來查看全部的歷史記錄:
如是隻是想把某個文件內容還原,就沒必要這麼麻煩,直接用git checkout命令就能夠的,先寫一段話:
咱們忽然發現不該該寫一句話的,能夠手工刪除(當內容比較多的時候會很麻煩),還能夠將文件內容從暫存區中恢復:
這其中是有一套規則,若是暫存區中有該文件,則直接從暫存區恢復,若是暫存區沒有該文件,則將還原成最近一次文件提交時的快照。
6
Git管理分支結構
分 支便是平行空間,假設你在爲某個手機系統研發拍照功能,代碼已經完成了80%,但若是將這不完整的代碼直接提交到git倉庫中,又有可能影響到其餘人的工 做,此時咱們即可以在該軟件的項目之上建立一個名叫「拍照功能」的分支,這種分支只會屬於你本身,而其餘人看不到,等代碼編寫完成後再與原來的項目主分支 合併下便可,這樣即能保證代碼不丟失,又不影響其餘人的工做。
通常在實際的項目開發中,咱們要儘可能保證master分支是很是穩定的,僅用於發佈新版本,平時不要隨便直接修改裏面的數據文件,而工做的時候則能夠新建不一樣的工做分支,等到工做完成後在合併到master分支上面,因此團隊的合做分支看起來會像上面圖那樣。
生產代碼提交方式
6.1Git建立分支
6.2Git合併分支
如今,咱們想把linux的工做成果合併到master分支上了,則可使用」git merge」命令來將指定的的分支與當前分支合併:
git合併分之示意圖
6.3Git分支衝突
可是Git並不能每次都爲咱們自動的合併分支,當遇到了內容衝突比較複雜的狀況,則必須手工將差別內容處理點,好比這樣的狀況:
git分支衝突示意圖
#那麼此時,咱們在master與linux分支上都分別對中readme文件進行了修改並提交了,那這種狀況下Git就無法再爲咱們自動的快速合併了,它只能告訴咱們readme文件的內容有衝突,須要手工處理衝突的內容後才能繼續合併:
7
Git管理標籤
當版本倉庫內的數據有個大的改善或者功能更新,咱們常常會打一個相似於軟件版本號的標籤,這樣經過標籤就能夠將版本庫中的某個歷史版本給記錄下來,方便咱們隨時將特定歷史時期的數據取出來用,另外打標籤其實只是像某個歷史版本作了一個指針,因此通常都是瞬間完成的。
8
GitLab安裝部署
1. 安裝和配置必要的依賴關係Install and configure the necessary dependencies。
若是你安裝postfix發送郵件,請選擇「網站設置」中。而不是使用後綴也能夠用郵件或 配置自定義SMTP服務器。若是你想使用的進出口,請 配置爲SMTP服務器。
在CentOS7,下面的命令將在系統防火牆打開HTTP和SSH訪問。
2. 添加gitlab包服務器安裝包Add the GitLab package server and install the package
3. 配置並啓動gitlab Configure and start GitLab
4. 瀏覽到主機名和登陸Browse to the hostname and login
8.1GitLab配置ssh
gitlab搭配ssh默認端口引起的血戰
問題以下:
仔細發現故障狀況
解決後效果,作一個對比,細心的朋友確定能發現:gitlab和github其實pull和push是同樣的,因此我會在下面介紹如何用github來pull和push。
9
GitHub託管服務
Github 顧名思義是一個Git版本庫的託管服務,是目前全球最大的軟件倉庫,擁有上百萬的開發者用戶,也是軟件開發和尋找資源的最佳途徑,Github不只能夠託 管各類Git版本倉庫,還擁有了更美觀的Web界面,您的代碼文件能夠被任何人克隆,使得開發者爲開源項貢獻代碼變得更加容易,固然也能夠付費購買私有 庫,這樣高性價比的私有庫真的是幫助到了不少團隊和企業。
大多數用戶都是爲了尋找資源而愛上Github的,首先進入網站,點擊註冊(Sign up):
若是沒有註冊的朋友點擊註冊
填寫註冊信息
選擇倉庫類型,默認免費,點擊底下finish
sign up註冊
咱們的GitHub帳號註冊完成
咱們在向Github推送文件時,能夠選擇SSH協議模式,在本機生成密鑰
點擊setting帳戶配置
點擊SSH keys
添加git服務器上生成的公鑰id_rsa.pub點擊Add key添加
查看ssh公鑰信息
準備工做已經完畢,右上角點擊建立一個新的倉庫
填寫倉庫的信息
建立成功後會跳轉到該倉庫,選擇ssh模式,複製版本倉庫克隆地址
刷新一下web,果真看到版本倉庫已經同步了
10
Git客戶端工具
https://www.sourcetreeapp.com/
Git和Mercurial的Windows或Mac的客戶端