1.Git是什么?
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)艳汽。
2.CVS及SVN都是集中式的版本控制系統(tǒng)鸥印,而Git是分布式版本控制系統(tǒng),集中式和分布式版本控制系統(tǒng)有什么區(qū)別呢递鹉?
集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的藏斩,而干活的時(shí)候躏结,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本狰域,然后開始干活窜觉,干完活了,再把自己的活推送給中央服務(wù)器北专。中央服務(wù)器就好比是一個(gè)圖書館,你要改一本書旬陡,必須先從圖書館借出來拓颓,然后回到家自己改,改完了描孟,再放回圖書館驶睦。
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作砰左,如果在局域網(wǎng)內(nèi)還好,帶寬夠大场航,速度夠快缠导,可如果在互聯(lián)網(wǎng)上,遇到網(wǎng)速慢的話溉痢,可能提交一個(gè)10M的文件就需要5分鐘僻造。
分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有何不同呢?首先孩饼,分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”髓削,每個(gè)人的電腦上都是一個(gè)完整的版本庫,這樣镀娶,你工作的時(shí)候立膛,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編炀驮谀阕约旱碾娔X上梯码。既然每個(gè)人電腦上都有一個(gè)完整的版本庫宝泵,那多個(gè)人如何協(xié)作呢?比方說你在自己電腦上改了文件A轩娶,你的同事也在他的電腦上改了文件A儿奶,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方罢坝,就可以互相看到對(duì)方的修改了廓握。
和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多嘁酿,因?yàn)槊總€(gè)人電腦里都有完整的版本庫隙券,某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了闹司。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題娱仔,所有人都沒法干活了。
在實(shí)際使用分布式版本控制系統(tǒng)的時(shí)候游桩,其實(shí)很少在兩人之間的電腦上推送版本庫的修改牲迫,因?yàn)榭赡苣銈儌z不在一個(gè)局域網(wǎng)內(nèi),兩臺(tái)電腦互相訪問不了借卧,也可能今天你的同事病了盹憎,他的電腦壓根沒有開機(jī)。因此铐刘,分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦陪每,但這個(gè)服務(wù)器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已檩禾。
當(dāng)然挂签,Git的優(yōu)勢(shì)不單是不必聯(lián)網(wǎng)這么簡單,后面我們還會(huì)看到Git極其強(qiáng)大的分支管理盼产,把SVN等遠(yuǎn)遠(yuǎn)拋在了后面饵婆。
CVS作為最早的開源而且免費(fèi)的集中式版本控制系統(tǒng),直到現(xiàn)在還有不少人在用戏售。由于CVS自身設(shè)計(jì)的問題侨核,會(huì)造成提交文件不完整,版本庫莫名其妙損壞的情況蜈项。同樣是開源而且免費(fèi)的SVN修正了CVS的一些穩(wěn)定性問題芹关,是目前用得最多的集中式版本庫控制系統(tǒng)。
除了免費(fèi)的外紧卒,還有收費(fèi)的集中式版本控制系統(tǒng)波俄,比如IBM的ClearCase(以前是Rational公司的涮拗,被IBM收購了)屹培,特點(diǎn)是安裝比Windows還大帮非,運(yùn)行比蝸牛還慢。
微軟自己也有一個(gè)集中式版本控制系統(tǒng)叫VSS博个,集成在Visual Studio中怀樟。由于其反人類的設(shè)計(jì),連微軟自己都不好意思用了盆佣。
分布式版本控制系統(tǒng)除了Git以及促使Git誕生的BitKeeper外往堡,還有類似Git的Mercurial和Bazaar等。這些分布式版本控制系統(tǒng)各有特點(diǎn)共耍,但最快虑灰、最簡單也最流行的依然是Git!
3.什么是版本庫呢痹兜?
版本庫又名倉庫穆咐,英文名repository,你可以簡單理解成一個(gè)目錄字旭,這個(gè)目錄里面的所有文件都可以被Git管理起來对湃,每個(gè)文件的修改、刪除遗淳,Git都能跟蹤拍柒,以便任何時(shí)刻都可以追蹤歷史,或者在將來某個(gè)時(shí)刻可以“還原”屈暗。
4.配置github
1.打開github網(wǎng)頁拆讯,點(diǎn)開剧包,如果你還沒注冊(cè) 那么此時(shí)你需要注冊(cè)完成再進(jìn)行下面的操作
2.如果頁面里已經(jīng)有一些 key,就點(diǎn)「delete」按鈕把這些 key 全刪掉往果。如果沒有,就往下看
3.點(diǎn)擊 New SSH key一铅,你需要輸入 Title 和 Key
4.打開gitbash,復(fù)制并運(yùn)行 rm -rf ~/.ssh/* 把現(xiàn)有的 ssh key 都刪掉陕贮,這句命令行如果你多打一個(gè)空格,可能就要重裝系統(tǒng)了潘飘,建議復(fù)制運(yùn)行
5.運(yùn)行 cat ~/.ssh/id_rsa.pub肮之,得到一串東西,完整的復(fù)制這串東西
這就是公鑰了
6.回到上面第 3 步的頁面卜录,在 Title 輸入「我的第一個(gè) key」
在 Key 里粘貼剛剛你你復(fù)制的那串東西(也就是公鑰)
7.點(diǎn)擊 Add SSH key
8.回到 Git Bash
9.運(yùn)行 ssh -T git@github.com戈擒,你可能會(huì)看到這樣的提示:
點(diǎn)擊yes,然后回車
10.然后如果你看到 Permission denied (publickey). 就說明你失敗了,請(qǐng)回到第 1 步重來艰毒,是的筐高,回到第 1 步重來;如果你看到 Hi chenyinjuan! You've successfully authenticated, but GitHub does not provide shell access. 就說明你成功了丑瞧!
- 一臺(tái)電腦只需要一個(gè) SSH key
- 一個(gè) SSH key 可以訪問你的所有倉庫柑土,即使你有 1000000 個(gè)倉庫,都沒問題
- 如果你新買了電腦绊汹,就在新電腦上重新生成一個(gè) SSH key稽屏,把這個(gè) key 也上傳到 GitHub,它可以和之前的 key 共存在 GitHub 上
- 如果你把 key 從電腦上刪除了西乖,重新生成一個(gè) key 即可狐榔,替換之前的 key
5.配置git
git config --global user.name 你的英文名
git config --global user.email 你的郵箱
git config --global push.default matching
git config --global core.quotepath false
git config --global core.editor "vim"
依次運(yùn)行
6.使用git
使用 git 簡單的有三種方法
1.只在本地使用
2.將本地倉庫上傳到 GitHub
3.下載 GitHub 上的倉庫
1.本地使用
1.1初始化
1.創(chuàng)建目錄作為我們的項(xiàng)目目錄:mkdir git-demo-1
2.進(jìn)入目錄 cd git-demo-1
3.git init,這句命令會(huì)在 git-demo-1 里創(chuàng)建一個(gè) .git 目錄
4.ls -la 你就會(huì)看到 .git 目錄获雕,它就是一個(gè)「倉庫」薄腻,不要進(jìn)去看
5.在 git-demo-1 目錄里面添加任意文件,添加了兩個(gè)文件典鸡,分別是 rresumec.html 和 cssc/style.css
- touch resumec.html
- mkdir cssc
-
touch cssc/style.css
6.運(yùn)行 git status -sb 可以看到文件前面有 ?? 號(hào)
git8.png
Initial commit on master
?? css/
?? index.html
這個(gè) ?? 表示 git 被廓,不知道你要怎么對(duì)待這些變動(dòng)。
7.使用 git add 將文件添加到「暫存區(qū)」
你可以一個(gè)一個(gè)地 add
a.git add index.html
b.git add css/style.css
你也可以一次性 add
git add . 意思是把當(dāng)前目錄(.表示當(dāng)前目錄)里面的變動(dòng)都加到「暫存區(qū)」
8.再次運(yùn)行 git status -sb萝玷,可以看到 ?? 變成了 A
git9.png
A 的意思就是添加嫁乘,也就是說你告訴 git,這些文件我要加到倉庫里
9.使用 git commit -m "信息" 將你 add 過的內(nèi)容「正式提交」到本地倉庫(.git就是本地倉庫)球碉,并添加一些注釋信息蜓斧,方便日后查閱
你可以一個(gè)一個(gè)地 commit
a.git commit index.html -m '添加index.html'
b.git commit css/style.css -m "添加 css/style.css"
你也可以一次性 commit
a.git commit . -m "添加了幾個(gè)文件"
10.再再次運(yùn)行 git status -sb,發(fā)現(xiàn)沒有文件變動(dòng)了睁冬,這是因?yàn)槲募淖儎?dòng)已經(jīng)記錄在倉庫里了挎春。
11.這時(shí)你使用 git log 就可以看到歷史上的變動(dòng):
commit f0d95058cd32a332b98967f6c0a701c64a00810a
Author: dianna 970405352@qq.com
Date: Thu Jun 28 22:30:43 2018 +0800
12.以上就是 git add / git commit 的一次完整過程看疙,可以看到,挺復(fù)雜的直奋。原則上能庆,你錯(cuò)了任何一步,就給我從頭來一遍脚线,做到你出錯(cuò)為止搁胆。
1.2 文件變動(dòng)
如果我想繼續(xù)改文件,應(yīng)該怎么做呢邮绿?
1.start cssc/style.css 會(huì)使用默認(rèn)的編輯器打開 cssc/style.css(macOS 上對(duì)應(yīng)的命令是 open cssc/style.css 在windows用戶下是start cssc/style.css)
2.然后我們?cè)?cssc/style.css 里寫入代碼保存退出
3.運(yùn)行 git status -sb 發(fā)現(xiàn)提示中有一個(gè) M
這個(gè) M 的意思就是 Modified渠旁,表示這個(gè)文件被修改了
4.此時(shí)你如果想讓改動(dòng)保存到倉庫里,你需要先 git add cssc/style.css 或者也可以 git add .注意船逮,由于這個(gè) css/cstyle.css 以前被我們 add 過顾腊,你往文章上面看,我們是 add 過 cssc/style.css 的挖胃,所以此處的 git add 操作可以省略杂靶,但我建議你使用 git 的前一個(gè)月,不要省略 git add冠骄。每一次改動(dòng)伪煤,都要經(jīng)過 git add 和 git commit 兩個(gè)命令,才能被添加到 .git 本地倉庫里凛辣。
5.再次運(yùn)行 git status -sb 發(fā)現(xiàn) M 有紅色變成了綠色別管它們的區(qū)別抱既,記住先 add,再 commit
6.運(yùn)行 git commit -m "更新 cssc/style.css"扁誓,這個(gè)改動(dòng)就被提交到 .git 本地倉庫了防泵。
7.再再次運(yùn)行 git status -sb,會(huì)發(fā)現(xiàn)沒有變更了蝗敢,這說明所有變動(dòng)都被本地倉庫記錄在案了捷泞。 git status -sb 是什么意思:git status 是用來顯示當(dāng)前的文件狀態(tài)的,哪個(gè)文件變動(dòng)了寿谴,方便你進(jìn)行 git add 操作锁右。-sb 選項(xiàng)的意思就是,-s 的意思是顯示總結(jié)(summary)讶泰,-b 的意思是顯示分支(branch)咏瑟,所以 -sb 的意思是顯示總結(jié)和分支。
8.可以通過git log來查看歷史提交記錄
1.3總結(jié)
至此痪署,我們來總結(jié)一下用到的命令
1.git init码泞,初始化本地倉庫 .git
2.git status -sb,顯示當(dāng)前所有文件的狀態(tài)
3.git add 文件路徑狼犯,用來將變動(dòng)加到暫存區(qū)
4.git commit -m "信息"余寥,用來正式提交變動(dòng)领铐,提交至 .git 倉庫
5.如果有新的變動(dòng),我們只需要依次執(zhí)行 git add xxx 和 git commit -m 'xxx' 兩個(gè)命令即可宋舷。別看本教程廢話那么多绪撵,其實(shí)就這一句有用!先 add 再 commit祝蝠,行了莲兢,你學(xué)會(huì) git 了。
6.git log 查看變更歷史
2.將本地倉庫上傳到 GitHub
如何將我們這個(gè) git-demo-1 上傳到 GitHub 呢续膳?
1.在 GitHub 上新建一個(gè)空倉庫,名稱隨意收班,一般可以跟本地目錄名一致坟岔,也叫做 git-demo-1
除了倉庫名,其他的什么都別改摔桦,其他的什么都別改社付,其他的什么都別改,其他的什么都別改邻耕,這樣你才能創(chuàng)建一個(gè)空倉庫
2.點(diǎn)擊創(chuàng)建按鈕之后鸥咖,GitHub 就會(huì)把后續(xù)的操作全告訴你,如圖
3.點(diǎn)擊 SSH 按鈕兄世,不點(diǎn)擊這個(gè)按鈕啼辣,你就會(huì)使用默認(rèn)的 HTTPS 地址。盡量不要使用 HTTPS 地址御滩,因?yàn)?HTTPS 地址特別麻煩鸥拧,每次要輸入密碼,而 SSH 不用輸入用戶名密碼削解。為什么 SSH 不用密碼呢富弦,因?yàn)槟阋呀?jīng)上傳了 SSH public key。還記得嗎氛驮?不記得腕柜,翻到「配置 GitHub」章節(jié)。
4.我們已經(jīng)有本地倉庫了矫废,所以看圖盏缤,圖中下半部分就是你需要的命令,我們一行一行拷貝過來執(zhí)行
5.復(fù)制者兩行代碼:
git remote add origin git@github.com:xxxxxxxxxxxxxxxxxxxx/git-demo-1.git
git push -u origin master
刷新當(dāng)前頁面磷脯,你的倉庫就上傳到 GitHub 了蛾找!
3. 直接在 GitHub 創(chuàng)建一個(gè)倉庫,然后下載到本地
第三種用法赵誓,那就是直接在 GitHub 創(chuàng)建一個(gè)倉庫打毛,然后下載到本地柿赊。
1.在GitHub 上新建一個(gè)倉庫 git-demo-2,這次就不創(chuàng)建空倉庫了幻枉,而是自帶 README 和 Lisence 的倉庫碰声,創(chuàng)建截圖如下:
請(qǐng)按圖中所示,填寫一模一樣的內(nèi)容熬甫,然后點(diǎn)擊創(chuàng)建按鈕胰挑。
2.這個(gè)倉庫就會(huì)自動(dòng)擁有三個(gè)文件:
3.現(xiàn)在遠(yuǎn)程倉庫已經(jīng)創(chuàng)建好了,怎么下載到我們的本地(也就是我們的電腦上)呢椿肩?答案是使用 git clone 命令
4.點(diǎn)擊頁面中唯一的綠色按鈕「clone or download」瞻颂,會(huì)看到一個(gè)彈出層
5.打開 Git Bash,找一個(gè)安全的目錄郑象,比如 ~/Desktop 桌面目錄就很安全:cd ~/Desktop贡这。運(yùn)行
運(yùn)行 git clone 你剛才得到的以git@github.com開頭的地址,運(yùn)行完了你就會(huì)發(fā)現(xiàn)厂榛,桌面上多出一個(gè) git-demo-2 目錄盖矫。
我是以demo-11為例
6.運(yùn)行 ls -la 你會(huì)看到,遠(yuǎn)程目錄的所有文件都在這里出現(xiàn)了击奶,另外你還看到了 .git 本地倉庫辈双。這是你就可以添加文件,git add柜砾,然后 git commit 了
三種方式它們分別是
在本地創(chuàng)建倉庫
將本地倉庫上傳到 GitHub
下載 GitHub 上的倉庫到本地
- git clone git@github.com:xxxx湃望,下載倉庫
- git init,初始化本地倉庫 .git
- git status -sb痰驱,顯示當(dāng)前所有文件的狀態(tài)
- git add 文件路徑喜爷,用來將變動(dòng)加到暫存區(qū)
- git commit -m "信息",用來正式提交變動(dòng)萄唇,提交至 .git 倉庫
- 如果有新的變動(dòng)檩帐,我們只需要依次執(zhí)行 git add xxx 和 git commit -m 'xxx' 兩個(gè)命令即可。別看本教程廢話那么多另萤,其實(shí)就這一句有用湃密!先 add 再 commit,行了四敞,你學(xué)會(huì) git 了泛源。
- git log 查看變更歷史
如何上傳更新
你在本地目錄有任何變動(dòng),只需按照以下順序就能上傳:
git add 文件路徑
git commit -m "信息"
git pull (相信我忿危,你一定會(huì)忘記這一個(gè)命令)
git push
下面是例子
cd git-demo-1
touch index2.html
git add index2.html
git commit -m "新建 index2.html"
git pull
git push
然后你去 git-demo-1 的 GitHub 頁面达箍,就能看到 index2.html 出現(xiàn)在里面了。
還有一些有用的命令
git remote add origin git@github.com:xxxxxxx.git 將本地倉庫與遠(yuǎn)程倉庫關(guān)聯(lián)
git remote set-url origin git@github.com:xxxxx.git 上一步手抖了铺厨,可以用這個(gè)命令來挽回
git branch 新建分支
git merge 合并分支
git stash 通靈術(shù)
git stash pop 反轉(zhuǎn)通靈術(shù)
git revert 后悔了
git reset 另一種后悔了
git diff 查看詳細(xì)變化
學(xué) git 命令都?jí)蚰銈儗W(xué)一周的缎玫,所以別妄想現(xiàn)在就掌握它硬纤,切記。