前言
看git入門,請想象自己就是開發(fā)人員,正在操作一個項目的本地與遠(yuǎn)程的文件版本更新控制。
一、Git原理(why use git)
1、版本控制
(1)定義:
是一種記錄一個或者若干個文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)(理論不好理解)
(2)用處:
情況一:項目文件中有很多文件,經(jīng)過許多天后修改若干個文件,想找到之前某一天所修改的錯誤記錄,卻無從查起,這個時候便需要一個有提交文件記錄(包括提交時間、提交修改內(nèi)容等)的文件修改的版本控制工具來幫助你
情況二:多人協(xié)作共同管理一個擁有多個代碼文件的項目,你需要有一個提交修改記錄的版本控制工具去告知你的伙伴,該文件在何時何地修改了什么內(nèi)容,以便伙伴了解,便于團(tuán)隊之間協(xié)作
2、種類
(1)本地版本控系統(tǒng)
(2)集中式版本控制系統(tǒng)(SVN)
即擁有共有的服務(wù)器,作為中心節(jié)點,pull、commit、push都集中在這臺服務(wù)器上進(jìn)行操作,受限于服務(wù)器不靈活性和網(wǎng)絡(luò)問題
(3)分布式版本控制系統(tǒng)(Git)
哎這個不說了,累,具體操作和體驗可以看之前寫的《git的初嘗試》:
淺談git入門(一):git初嘗試
3、Git優(yōu)勢
誕生于2005年,來源自linux開源社區(qū)
- 速度很快
- 分布式(不怕斷網(wǎng)哈哈~)
- 簡單的設(shè)計
- 允許上千個并行分支同時開發(fā)
二、Git的幾個重要概念
1、記得之前在《git初嘗試》中嘗試對項目進(jìn)行本地和遠(yuǎn)程庫之間文件版本的操作控制。
如下圖標(biāo)注,終端操作,push到遠(yuǎn)程庫的全過程:

2、倉庫中的三種必備狀態(tài)(重要概念):

(1)已暫存(staged),將已修改的文件放在下次提交(提交至本地倉庫)時要保存的清單中,即暫存區(qū)里)。
(2)(添加了文件之后,)已修改(modified)某個文件,但還沒有提交保存
(3)已提交(committed)該文件,已經(jīng)被安全地保存在本地數(shù)據(jù)庫中了
三、簡單演示
1、起步
初次使用,需要設(shè)置姓名和郵箱
$ git config --global user.name "你的名字"
$ git config --global user.email johndoe@example.com
2、clone一個項目
用于把一個已有的github項目clone(下載)到本地變?yōu)楸镜貍}庫
$ git clone git@github.com:jirengu/blog.git
$ cd blog
3、添加文件并提交【本地庫?遠(yuǎn)程庫】
(1)創(chuàng)建文件
$ touch a.md
(或者直接打開本地倉庫目錄新建文件)
由于剛才的文件是空文件,通過一個命令在文件中寫入一個字符串:
$ echo "hello" > a.md
(2)查看倉庫狀態(tài)
$ git status
此時,學(xué)會看命令行提示(英語單詞了解一下吧orz( ̄▽ ̄)")
如提示:untracked files(未跟蹤)、nothing added to commit(還沒添加文件在暫存區(qū)去等待本地提交),并提示怎么做:(use "git add" to track)。如圖:

(3)把當(dāng)前文件夾下的新增和刪除全部放在暫存區(qū)
$ git add .
再次查看:
$ git status
如查看提示:use "git reset HEAD <file>..." to unstage,即可以將文件從暫存區(qū)拿出來。
(4)把暫存區(qū)的更新提交到本地庫
$ git commit -am "add file"
關(guān)于-am "add file"中的-am可以看一下份資料:
git commit -m 與 git commit -am 的區(qū)別?git commit -m 與 git commit -am 的區(qū)別
而-am "add file"即說明文件以什么修改狀態(tài)(如修改?添加資料?)即被跟蹤暫存等待本地提交。
再次查看
$ git status
提示push
推送本地倉庫
$ git push origin master

4、修改、刪除文件【遠(yuǎn)程庫?本地庫】
(1)把遠(yuǎn)程庫拉下合并(merge)到本地倉庫
$ git pull
(2)
修改文件
$ vim a.md
或
刪除文件
$ rm -rf a.md
$ git add .
(3)#添加文件至?xí)捍鎱^(qū)
$ git add .
(4)#提交至本地庫
$ git commit -am "字符串"
注:這里需要注意的是如果提交消息包含大量字符串,提交參數(shù)不用加m
(5)#推送遠(yuǎn)程庫
$ git push origin master
5、多人協(xié)作
(1)有一人在遠(yuǎn)程修改文件,你不知道仍繼續(xù)在終端修改提交文件
$ touch b.md
$ git add .
$ git commit -am "add b"
$ git push
終端修改,出現(xiàn)拒絕的報錯,如:

(3)這個報錯說明終端push遠(yuǎn)程文件失敗。即在遠(yuǎn)程庫的一些已修改的文件沒有更新到本地,本地文件夾里沒有相應(yīng)的更新,你需要在本地終端同步更新遠(yuǎn)程庫所更新過的文件。
(4)被多人協(xié)作過的遠(yuǎn)程庫拉下本地更新一下,即執(zhí)行:
$ git pull
自動將更新后的遠(yuǎn)程庫拉回來,并merge(合并)你所更新的文件,進(jìn)入一個vim編輯器,編輯需要更新的文件
$ vim b.md
你要怎么樣都可以,不想干嘛就保存退出,不再說vim的使用方法了。趕緊看下一步:
$ git add .
$ git commit -am "merge"
$ git push
結(jié)論:
每一次在本地庫完成自己的文件更新,都需要git pull一下,讓遠(yuǎn)程庫在本地與你的文件合并(merge),在推送(push)