文章目錄
- 【前言】
- 【相關資料】
- 【🌟🌟實踐速通篇】
- 【相關疑問篇】
- 【學習篇】
- 什么是版本控制系統
- 集中式 or 分布式
- 集中式
- 分布式
- Git是什么
- 安裝
- 在Linux上安裝
- 在Mac上安裝
- 在Windows上安裝
- 配置
- 五個作業區域
- 創建本地版本庫
- 把檔案添加到暫存區
- 把檔案從暫存區移出
- 提交修改到版本庫
- 查看Git狀態
- 【🌟🌟🌟實踐篇】
【前言】
學習Git的主要的目的是學習版本控制,所以我們應該學習的是版本控制,而非具體某一項工具,如Git,而這里以Git為例只是一個讓我們學習版本控制的途徑,未來如果有一天你換到了別的版本控制工具,一定要學會舉一反三,
幾乎所有的命令列式應用都可以通過在命令列輸入man 應用程式名(man是manual的縮寫)的方式查看官方手冊,IT屆流行一句話叫RTFM,意思是Read The Fucking Manual,官方手冊足夠權威,推薦英文基礎較好的同學直接閱讀官方手冊學習,
對于工具類的東西,以及很多計算機知識來說,最快的學習途徑就是用,先會用再去研究原理往往能達到事半功倍的效果,如果你上來就研究原理,往往對于那些大神嘴里說的東西不知甚解,不知道為什么這么做,也不知道這么做有什么好處,甚至于講一些原理,你都不知道這個東西以后該用在什么地方,這會是件很可悲、很浪費時間的事,
這也是很多人都說《Java編程思想》這本書很好但并不適合新手的一部分原因,什么階段的水平學習什么樣的知識,用階梯式的學習而不是跳躍式的學習往往能減少很多不必要的麻煩,也能減少對自信心的打擊,
版本控制和Git的學習獨立于具體的具體的編程語言和其他知識,屬于自稱體系的工具類知識,所以即便沒有編程基礎也可以學習,但因為大多通過Linux命令列互動的方式來用(也有GUI客戶端),所以可能需要一些Linux操作相關的知識,
說明:一開始寫了很多東西,后來在繼續查找相關資料的程序中,發現很多東西都有人寫的更透徹,更明了,筆者希望自己能夠寫出更有價值的東西出來,加上自己目前主要的精力還是不應該放在Git上面,遂萌生了退意,所以附上了不少相關資料的連接,待后續有精力時再做補充,這是筆者第一篇博文,雖然沒有完成,但是依然在書寫程序中識訓了很多,
【相關資料】
Git官方網站:最權威的參考資料
Git手冊:man git的網頁版
Git命令速查手冊官方版
相關書籍:《Pro Git, 2nd》:Git官方推薦的書籍,中文版
博客:Git的思想和基本作業原理:了解Git底層作業原理
可視化Git命令速查表:Git五個磁區之間的命令對應圖🌟🌟🌟強烈推薦!!!建議初學者學習每個命令時都對照著這個圖,思考這個命令發生了什么,能達到事半功倍的學習效果,點擊每個區域能顯示與該區域有關的命令,
Github教程:一個很詳盡的Github教程
猴子都能懂的Git入門:一個通俗易懂的Git入門教程
廖雪峰的git在線教程:個人認為有點亂,扯的有點多,對新手不太友好,容易混亂,但是對著練習一遍會有識訓,
【🌟🌟實踐速通篇】
頭歌教學實踐平臺:Git從小白到高手 :適合新手認識Git并進行在線練習,
Git在線聯系網站:中文版,對新手比較友好,但是容易造成練完一遍仍然感覺不會用,,,
【相關疑問篇】
什么是版本控制系統?
版本控制有什么用?
我為什么要學這個?
Git是什么?
為什么要學習Git?
除了Git還有沒有其他工具能達到你的目的?
【學習篇】
隨著計算機技術的發展,軟體的結構變得越來越復雜,規模也越來越大,軟體開發中的版本控制、代碼托管及協同開發也變得越來越重要,
Git是一個分布式的版本控制系統,它功能強大、操作簡單,并且能很好地解決以上問題,目前,熟練地使用Git已經成了一個軟體開發從業者必備的技能,同時,其他領域的作業者也可以使用Git進行產品的版本控制,
說明:
Git是一個工具,沒必要把時間浪費在那些“高級”但幾乎永遠不會用到的命令上,一旦你真的非用不可了,到時候再自行Google或者請教專家也未遲,合理分配學習精力,沒必要過于追求奇技淫巧,
什么是版本控制系統
在寫論文的時候,你有沒有遇到過這種情況:

我想每一個寫過畢業論文或者做過畢設的同學一定有過這種痛的經歷吧,雖然現在Word/WPS這些工具已經非常強大,但是生成那么多檔案依然夠讓自己抓狂的,這還只是一個檔案,如果是紛繁復雜的代碼呢?那么多源代碼檔案、編譯后的檔案、組態檔放在一起,想做改動,難道每次都要備份一個嗎?光是想想都夠讓人頭大,
如果能有一個軟體,可以幫自己管理每次改動,并且給每次版本的迭代打上標簽、做好記錄,想撤回到那個版本,直接跳到那個時間節點就好,仿佛有了時光回溯一般該多好,
一定要相信,作為互聯網原住民,你遇到的問題,有相當大的概率你的前輩們都遇到過并且解決了, 那么前輩們是如何解決這個問題的呢?版本控制應運而生,
集中式 or 分布式
集中式
版本庫是集中存放在中央服務器的,干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的成果推送給中央服務器,有點類似于C/S架構,缺點是必須聯網才能作業,如果是在局域網還好,如果在互聯網上,遇到網速慢的情況,可能提交一個10M的檔案就需要5分鐘,人生苦短,何必把時間浪費在這上面,
- 最早的開源且免費的集中式版本控制系統
CVS:由于CVS自身設計的問題,會造成提交檔案不完整,版本庫莫名其妙損壞的情況,- 目前用得最多的集中式版本庫控制系統
SVN:同樣是開源且免費,修正了CVS的一些穩定性問題,- 收費的集中式版本控制系統,比如IBM的
ClearCase(以前是Rational公司的,被IBM收購了):特點是安裝比Windows還大,運行比蝸牛還慢,能用ClearCase的一般是世界500強,他們有個共同的特點是財大氣粗,- 微軟自己也有一個集中式版本控制系統叫
VSS:集成在Visual Studio中,由于其反人類的設計,連微軟自己都不好意思用了,
分布式
每個人的電腦上都有一個完整的版本庫,這樣,作業的時候就不需要聯網了,那多個人如何協作呢?比方說你在自己電腦上改了檔案A,你的同事也在他的電腦上改了檔案A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了,
在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機,因此,分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,比如我們大名鼎鼎的GitHub,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已,
分布式版本控制系統除了Git以及促使Git誕生的BitKeeper外,還有類似Git的Mercurial和Bazaar等,這些分布式版本控制系統各有特點,但最快、最簡單也最流行的依然是Git!
Git是什么
目前世界上最先進的分布式版本控制系統,Git-維基百科(可以了解一下誕生的歷史)
安裝
在Linux上安裝
👉學習linux基礎操作
- 在線安裝
在Debian或Ubantu Linux(Debian類體系結構系統)
在老一點的Debian或Ubantu Linux1sudo apt-get install git
在Fedora或CentOSsudo apt-get install git-coreyum install git - 離線安裝
如果是其他Linux版本或者系統沒有接入互聯網,Git可以通過原始碼安裝,具體的安裝程序請參考Git官網教程或者Github上Git倉庫的用戶指南,但對于初學用戶,還是建議大家直接安裝,
在Mac上安裝
在Mac上安裝Git有四種方式:
- 圖形化的
Git安裝工具,網址圖形化Git工具安裝地址 - 通過
MacPorts安裝,如果已經裝好了MacPorts,請用下面的命令安裝Git:sudo port install git-core +svn +doc +bash_completion +gitweb - (推薦) 安裝
Homebrew,然后通過Homebrew安裝Git,具體方法請參考Homebrew的檔案,或這篇教程👉Homebrew教程 - (推薦) 直接從AppStore安裝
Xcode,Xcode集成了Git,不過默認沒有安裝,你需要運行Xcode,選擇選單"Xcode -> Preferences",在彈出視窗中找到"Downloads",選擇"Command Line Tools",點"Install"就可以完成安裝了,Xcode是Apple官方IDE,功能非常強大,是開發Mac和iOS App的必選裝備,而且是免費的!但是體積非常大,如果只想使用Xcode附帶的工具包,可以在控制臺中輸入xcode-select --install
在Windows上安裝
在Windows上使用Git,可以從Git官網直接下載安裝程式,然后按默認選項安裝即可,
安裝完成后,在開始選單里找到“Git”->“Git Bash”,蹦出一個類似命令列視窗的東西,就說明Git安裝成功!
配置
由于Git是一個分布式的版本控制系統,所以當利用它進行分工協作時,必須區分不同的機器,這一點可以通過配置機器的名字和郵箱完成,Git初始使用時,也會提示進行配置,配置命令如下:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
在實際的使用程序中,可以將上面命令中"Your Name"、"email@example"替換為自己實際的名字和郵箱,
注意git config命令的–global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址,
五個作業區域
學習Git的程序中,心中要始終有五個作業區域,幾乎所有的作業命令都是在這五個作業區域間做操作,它們分別長這樣:

關于每個區域的作用,將在后文中逐一介紹,請大家把這五個區域印在腦海中,
創建本地版本庫
什么是版本庫:
版本庫又名倉庫,英文名
repository,你可以簡單理解成一個目錄,這個目錄里面的所有檔案都可以被Git管理起來,每個檔案的修改、洗掉,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”,
首先,我們需要創建一個目錄,做為我們的本地版本庫,然后使用git init命令,將其初始化為一個本地版本庫,如下:
mkdir /home/repo #在/home目錄下,創建repo目錄
cd /home/repo #進入repo目錄
git init #將repo初始化為一個本地版本庫
通過上述命令,即可在/home目錄下,創建repo目錄,并將其初始化為一個版本庫,在實際使用中,可以將上面命令中的/home/repo 換成你自己想用的目錄,
細心的讀者可以發現當前目錄下多了一個
.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的檔案,不然改亂了,就把Git倉庫給破壞了,
如果你沒有看到.git目錄,那是因為這個目錄默認是隱藏的,用ls -al命令就可以看見,
里面可能包含這些檔案(不同的作業系統可能會有細微的差異)
把檔案添加到暫存區
不少初識Git的同學在學完Git后可能對于暫存區的概念感覺很迷惑,不知道為什么要增加這么一個區域,筆者就是如此,在查閱了多方資料后,得到一個比較能讓人接受的論調(未必是對的),
不少人認為添加暫存區是為了能夠將檔案分批提交,比如在作業區添加了
功能A對應的檔案a1、檔案a2和功能B對應的檔案b1、檔案b2,由于CLI操作的局限性,在作業區和本地版本庫中間添加一個暫存區能有利于將兩個功能的檔案分開提交,從而生成兩個節點,
但如果只是為了如此,commit命令本身就能完成這種事情,
所以這種說法有一定的道理性,
筆者認為另一部分的原因在于Unix的設計哲學,Unix系統的設計哲學認為,一個程式應該只注重一件事并把這件事做到極致,在提交程序中,選擇提交哪個檔案和提交動作本身顯然應該是兩個功能,試想一下提交分為把提交所有、提交部分、選取并提交、提交帶說明、提交并tag、提交并push、提交并覆寫那么多子功能的話,簡直就是個災難,
提交就應該只做提交的事情,篩選應該交由其它指令來完成,事實上,所謂的提交并覆寫和全部提交都是后面給加的腳本功能,
如果實在無法理解的話,可以類比生活中先添加到購物車再下單的場景,
把檔案添加到暫存區,需要用到git add命令,git add命令的使用方式如下所示:
#追蹤所有檔案
git add .
#追蹤hello.txt檔案
git add hello.txt
如上所示,當需要追蹤所有檔案時,使用
git add .,如果想添加指定檔案,只需要像示例中添加hello.txt一樣,將檔案名做為引數名,傳給git add即可,在實際使用中往往用git add .配合.gitignore檔案來更方便的控制追蹤哪些檔案,關于.gitignore檔案的內容將在下文介紹,
這樣,你便成功追蹤到了hello.txt檔案,以后對于hello.txt檔案的每次修改,Git都會了如指掌,
把檔案從暫存區移出
撤銷追蹤檔案,需要用到git checkout [檔案名]命令,git checkout [檔案名]命令的使用方式如下所示
git checkout hello.txt
這樣,你撤銷了對于hello.txt檔案的追蹤,
提交修改到版本庫
當我們對一個或多個追蹤的檔案做了修改,或者新添加了一個或多個追蹤的檔案,并且已經完成了相應的作業,想要把當前的作業狀態保存起來,類似于我們撰寫檔案時候的ctrl/command + s該怎么做呢,這個時候就需要我們把當前的修改保存到版本庫,從而形成一個時間回溯點,也類似于角色扮演類游戲中的存檔點,
把修改添加到版本庫,需要用到git commit命令,git commit 命令的使用方式如下:
git commit -m "本次提交的簡要說明"
-m引數后面跟的是本次提交內容的簡要說明,用來說明你這次的提交,主要是做了哪些修改,這個說明內容是必須的,如果不加-m引數,將會自動進入到一個vim編輯界面,強制要求你撰寫此次提交的說明,且撰寫內容不得為空,大概長這樣
提交成功后,控制臺會這樣提示你

[master c6a04a3] 簡要說明:提示你這個存檔點在master分支,編號的最后七位是c6a04a3,簡要說明是你在-m引數后面或者vim編輯器里撰寫的此次提交的說明,
1 file changed, 0 insertions(+), 0 deletions(-):提示你此次相比上次存檔點更改了1個檔案,檔案中插入了0行,洗掉了0行,
這樣,你便將hello.txt檔案成功保存到了版本庫中,類似于在游戲中進入了下一個存檔點,這個存檔點相比于上次,多了一個hello.txt檔案,
說明:所有的版本控制系統,其實只能跟蹤文本檔案的改動,比如TXT檔案,網頁,所有的程式代碼等等,Git也不例外,版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”,而圖片、視頻這些二進制檔案,雖然也能由版本控制系統管理,但沒法跟蹤檔案的變化,只能把二進制檔案每次改動串起來,也就是只知道圖片從100KB改成了120KB,但到底改了啥,版本控制系統不知道,也沒法知道,
不幸的是,Microsoft的Word格式是二進制格式,因此,版本控制系統是沒法跟蹤Word檔案的改動的,前面我們舉的例子只是為了演示,如果要真正使用版本控制系統,就要以純文本方式撰寫檔案,
因為文本是有編碼的,比如中文有常用的GBK編碼,日文有Shift_JIS編碼,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,所有語言使用同一種編碼,既沒有沖突,又被所有平臺所支持,
查看Git狀態
在命令列中輸入
git status
將出現以下三種情況:
- 當前檔案下的所有檔案都被追蹤,且沒有尚未提交的檔案,類似于你剛存檔完畢, 類似于下面的輸出:

- 當你創建完
helloGit.txt,但沒有追蹤它時,如果使用git status命令,你會得到類似于下面的輸出:
意思是在所有你追蹤的檔案中,沒有要提交的,但是有未追蹤且未忽視的檔案出現, - 創建完
helloGit.txt,且追蹤了這個檔案,但是沒有提交,你會得到類似于下面的輸出:

意思是你追蹤了helloGit.txt檔案,但是你沒有提交它,類似于游戲資料發生了變化但是沒有存檔,
未完待續,,,
【🌟🌟🌟實踐篇】
未完待續,,,
1、為什么要使用
git-core: 以前有個軟體也叫GIT(GNU Interactive Tools),結果Git就只能叫git-core了,由于Git名氣實在太大,后來就把GNU Interactive Tools改成gnuit,git-core正式改為git, ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293937.html
標籤:其他
上一篇:關于微信小程式上線流程的簡單總結
下一篇:idea必備配置和插件


