第1章:Git的起源
自由主義教皇“林納斯·托瓦茲”
Git是由Linux之父Linus開發(fā)的,在2005年4月3號(hào)開始開發(fā),僅四天時(shí)間Git就可以投入使用了。到同年6月份,Linux已經(jīng)在使用Git管理代碼了。
Linux版本管理最早是通過手工合并代碼的方式進(jìn)行的,不使用CVS的原因就是Linus堅(jiān)決反對這種集中式的版本管理工具。而迫于其他開發(fā)者的壓力,Linus最后決定使用BitKeeper一種分布式的版本管理工具。與集中式不同,使用分布式的版本管理工具每個(gè)人都可以在本地進(jìn)行版本的管理,如日志提交、代碼提交、創(chuàng)建tag和分支、合并分支等等操作。
而在2005年4月,Andrew Tridgell 為了開發(fā)一個(gè)可以與BitKeeper交互的工具,試圖反編譯BitKeeper。這讓開發(fā)該軟件的公司BitMover得知并取消了Linux社區(qū)免費(fèi)試用BitKeeper的權(quán)利。這也成為了Linus開發(fā)Git的契機(jī),促進(jìn)了Git這一偉大作品的誕生。
第2章:Git的使用
1.Git的安裝
Windows版的Git,從https://git-scm.com/download/win下載然后按默認(rèn)選項(xiàng)安裝即可。
安裝完成后,右鍵打開菜單欄找到“Git”->“Git Bash Here”,蹦出一個(gè)類似命令行窗口的東西,就說明Git安裝成功!
默認(rèn)git窗口背景是黑色的,字體也比較小,可以通過右鍵設(shè)置
安裝完成后,還需要最后一步設(shè)置,在命令行輸入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config user.name 查看配置的姓名
git config user.email 查看配置的郵箱
因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。
git配置的文件會(huì)自動(dòng)保存在:c盤----用戶----asus----.gitconfig
2. Linux的幾條命令
mkdir xxx?新建文件夾
vi x.txt?新建文件
????輸入 i 進(jìn)入編輯模式
????ESC + :+ wq 保存并退出
????ESC + :+ q! 不保存并退出
cd xxx?進(jìn)入xxx目錄
cd ..?返回上一級(jí)目錄
ls?列出當(dāng)前文件夾中所有文件
pwd?顯示當(dāng)前目錄
cat x.txt 顯示文件內(nèi)容
clear?清屏
3. 創(chuàng)建版本庫
git init? ? 初始化版本庫
????創(chuàng)建成功會(huì)提示 Initialized empty Git repository in c:/Users/xxx/Desktop/demogit/.git/
????初始化執(zhí)行g(shù)it命令,會(huì)提示fatal: Not a git repository (or any of the parent directories): .git
????你還會(huì)發(fā)現(xiàn)目錄上多出一個(gè).git的文件夾,這個(gè)文件夾是Git來跟蹤管理版本庫的,不要去修改和刪除這個(gè)文件里的內(nèi)容。
git add x.xx? ??添加指定文件到暫存區(qū)中
????不會(huì)有任何提示,但是提交成功了
????失敗會(huì)提示fatal: pathspec 'x.txt' did not match any files
????可能會(huì)出現(xiàn)警告,由于linux和window的換行符不一致導(dǎo)致的。
????警告內(nèi)容:warning: LF will be replaced by CRLF in a.txt.
????解決方式:git config --global core.autocrlf false
怎么查看文件有沒有添加成功呢?
git status
????1. 紅色表示在工作區(qū)。
????2.綠色表示在暫存區(qū)。
????3. 沒有任何顯示代表所有文件位于版本區(qū)。
git commit -m 'xxx'? ?提交暫存區(qū)所有文件到版本區(qū)
????提交成功會(huì)提示:
????????[master (root-commit) 88bbb64] first commit
????????1 file changed, 2 insertions(+)
????????create mode 100644 x.txt
如果只輸入git commit會(huì)出問題,這時(shí)需要ESC + :+ q! 退出就好
4. 理解工作區(qū)+版本區(qū)+暫存區(qū)
????工作區(qū)(working Directory):簡單的理解——你在電腦里能看到的目錄。
????暫存區(qū)(stage):介于工作區(qū)和版本區(qū)中間,工作區(qū)到版本區(qū)的“必經(jīng)之路”
????版本庫(Repository):工作區(qū)有一個(gè)隱藏目錄.git,準(zhǔn)確的來說這個(gè)不算工作區(qū),而是Git的版本庫。
第一步是用git add把文件添加進(jìn)暫存區(qū)。
第二步是用git commit把暫存區(qū)的所有內(nèi)容提交到當(dāng)前版本庫。
5. 差異對比
????git diff : 比較暫存區(qū)與工作區(qū)
????git diff --cached : 比較版本區(qū)與暫存區(qū)
????git diff master : 比較版本區(qū)與工作區(qū)
6. 日志+版本號(hào)
????git log?顯示從最近到最遠(yuǎn)的所有提交日志
????git reflog?顯示每次提交(commit)的commit id
7. 版本回退+版本穿梭+版本撤銷
????git reset --hard HEAD^? ? 版本回退(回退一次提交)
????git reset --hard 版本號(hào)? 回退到指定的commit id版本
????git reset HEAD? 用版本庫中的文件去替換暫存區(qū)的全部文件。
????git checkout -- x.txt? ? 用暫存區(qū)指定文件去替換工作區(qū)的指定文件(危險(xiǎn))
????git checkout HEAD x.txt? 用版本庫中的文件替換暫存區(qū)和工作區(qū)的文件(危險(xiǎn))
????git rm --cached x.txt 從暫存區(qū)刪除文件
8. 刪除文件
!!!文件或者文件夾必須通過git管理(也就是提交到版本區(qū))才能進(jìn)行刪除
????git rm x.txt 刪除文件(使用git提供的命令刪除文件結(jié)果會(huì)同步到暫存區(qū))
????git rm -r xxxx 刪除文件夾(不能刪除空文件夾)
git交互圖示如下:
9. 分支
分支常用命令
git checkout -b dev 創(chuàng)建dev分支,并切換到dev分支(會(huì)把原來分支的文件復(fù)制一份到新分支中)
git branch? 查看當(dāng)前分支
git checkout master 切換分支
git merge dev? 合并dev分支到當(dāng)前分支
git branch -d dev? 刪除指定分支
git diff branch1 branch2 顯示出兩個(gè)分支之間所有有差異的文件的詳細(xì)差異
git diff branch1 branch2 --stat 顯示出兩個(gè)分支之間所有有差異的文件列表
git diff branch1 branch2 xxx? 顯示指定文件的詳細(xì)差異
!!! 當(dāng)文件夾為空時(shí)創(chuàng)建新分支會(huì)把原來分支覆蓋掉,要?jiǎng)?chuàng)建分支必須先把當(dāng)前分支的文件提交到版本庫
第3章:版本控制系統(tǒng)的區(qū)別
1. 集中式版本控制系統(tǒng)
????代表有SVN、CVS
?????? 集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的,每個(gè)開發(fā)人員電腦里只有其中一個(gè)版本。
2. 分布式版本控制系統(tǒng)
? ? ?代表有Git、BitKeeper
????????每個(gè)開發(fā)人員電腦里都有一個(gè)完整的版本庫。同時(shí),它也需要一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,來方便“交換”大家的代碼修改。
3. 集中式與分布式的區(qū)別
第4章:GitHub
1. GitHub是什么?
????GitHub是一個(gè)Git項(xiàng)目托管網(wǎng)站。需要注冊一個(gè)github賬號(hào)用來托管代碼
2. GitHub能做什么?
????能夠分享你的代碼或者其他開發(fā)人員配合一起開發(fā)。GitHub是一個(gè)基于Git的代碼托管平臺(tái),Git并不像SVN那樣有一個(gè)中心服務(wù)器。目前我們使 用到的Git命令都是在本地執(zhí)行,你就需要將數(shù)據(jù)放到一臺(tái)其他開發(fā)人員能夠連接的服務(wù)器上。
3. GitHub遠(yuǎn)程倉庫的使用
3.1. 本地倉庫內(nèi)容推送給遠(yuǎn)程倉庫
本地庫和遠(yuǎn)程庫打交道時(shí),要注意將本地文件交給本地庫管理
(1) 新建本地倉庫
????????????git init
????????????git add .
????????????git commit -m “first commit”
(2) 新建遠(yuǎn)程倉庫
? ? ? ? ? ? 在GitHub網(wǎng)站上點(diǎn)擊New repository
(3) 本地倉庫和遠(yuǎn)程倉庫進(jìn)行關(guān)聯(lián)
????????????git remote add origin https://github.com/xpromise/oa.git (HTTPS)
(4) 把本地倉庫內(nèi)容推送到遠(yuǎn)程倉庫中
????????????git push -u origin master (首次加-u)
我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送到遠(yuǎn)程新的master分支,還會(huì)把本地master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送時(shí)可以簡化命令git push origin master。
備注:若在成功推送過一次代碼后,電腦不能夠自動(dòng)記住github的賬戶和密碼,執(zhí)行以下命令解決:git config --global credential.helper store
3.2. 遠(yuǎn)程倉庫有內(nèi)容克隆到本地進(jìn)行開發(fā)
克隆遠(yuǎn)程倉庫到本地
git clone https://github.com/xxx.git? (HTTPS)
!!! git克隆的是所有的分支,通過git branch查看不了,需要通過git checkout 分支名? ? ?直接切換到指定分支
3.3. 本地有內(nèi)容,遠(yuǎn)程有內(nèi)容,更新不同的內(nèi)容
第一種拉取方式:git pull origin master
? ? ? ? 將遠(yuǎn)程倉庫的master分支上代碼版本復(fù)制/合并到本地master分支上
? ? ? ? !!!?git pull可以直接拉取遠(yuǎn)程倉庫最新分支內(nèi)容
第二種拉取方式:git fetch origin master:tmp
? ? ? ? 新建一個(gè)tem分支,將遠(yuǎn)程倉庫的master分支上代碼版本復(fù)制到tep分支上,不會(huì)自動(dòng)合并
? ? ? ? !!!這種方式不常用,但面試可能會(huì)問
4. GitHub其他功能
1. Fork
將別人的項(xiàng)目clone一份,但是owner變成自己,這樣你就可以在遵守open source license的前提下任意修改這個(gè)項(xiàng)目了。
相當(dāng)于你在原項(xiàng)目的主分支上又建立了一個(gè)分支,你可以在該分支上任意修改,如果想將你的修改合并到原項(xiàng)目中,可以pull request,這樣原項(xiàng)目的作者就可以將你修改的東西合并到原項(xiàng)目的主分支上去,這樣你就為開源項(xiàng)目貢獻(xiàn)了代碼,開源項(xiàng)目就會(huì)在大家的努力下不斷地壯大和完善。
2. GitHub Pages(使用github搭建個(gè)人網(wǎng)站)
推送本地代碼到GitHub倉庫
創(chuàng)建本地倉庫
????????git init
????????git add .
????????git commit -m "xxx"
創(chuàng)建GitHub遠(yuǎn)程倉庫
本地倉庫關(guān)聯(lián)遠(yuǎn)程倉庫
????????git remote add origingit@github.com:xpromise/jd.git
推送本地更新
????????git push -u origin master
配置GitHub Pages選項(xiàng)
需要注意的問題
目錄第一層需要有一個(gè)index.html文件作為啟動(dòng)文件,命名不可更改。
部署完之后這個(gè)網(wǎng)址就可以訪問了https://zhanchujin.github.io/zhanchujin/