集中式和分布式管理代碼的區(qū)別
集中式:集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的眉踱,而干活的時(shí)候挤忙,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本谈喳,然后開始干活册烈,干完活了,再把自己的活推送給中央服務(wù)器婿禽。
分布式:分布式版本控制系統(tǒng)沒有“中央服務(wù)器”赏僧,每個(gè)人的電腦上都是一個(gè)完整的版本庫,這樣扭倾,你工作的時(shí)候淀零,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編炀驮谀阕约旱碾娔X上膛壹。既然每個(gè)人電腦上都有一個(gè)完整的版本庫驾中,那多個(gè)人如何協(xié)作呢?比方說你在自己電腦上改了文件A模聋,你的同事也在他的電腦上改了文件A肩民,這時(shí),你們倆之間只需把各自的修改推送給對方链方,就可以互相看到對方的修改了持痰。
Git安裝
- linux 上安裝 首先看電腦有沒有安裝git 在終端使用命令git
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
根據(jù)返回的信息可以看到?jīng)]有安裝git 下面返回了 安裝方法: sudo apt-get install git
- 在Mac上按轉(zhuǎn)git
在Mac上安裝git 特別簡單 ,直接從AppStore安裝Xcode祟蚀,Xcode集成了Git 工窍。Xcode是Apple官方IDE,功能非常強(qiáng)大前酿,是開發(fā)Mac和iOS App的必選裝備移剪,而且是免費(fèi)的!
3.在windows上安裝git
在Windows上使用Git薪者,可以從Git官網(wǎng)直接下載安裝程序,(網(wǎng)速慢的同學(xué)請移步國內(nèi)鏡像)剿涮,然后按默認(rèn)選項(xiàng)安裝即可言津。
安裝完成后,在開始菜單里找到“Git”->“Git Bash”取试,蹦出一個(gè)類似命令行窗口的東西悬槽,就說明Git安裝成功!
Git的使用
1.創(chuàng)建一個(gè)文件夾(項(xiàng)目)
$ mkdir Project
$ cd Project
$ pwd
/Users/yahi/Desktop/Ya/個(gè)人/Project
2.通過git init命令把這個(gè)目錄變成Git可以管理的倉庫(repository)
git init
Initialized empty Git repository in /Users/yahi/Desktop/Ya/個(gè)人/Project
瞬間Git就把倉庫建好了瞬浓,而且告訴你是一個(gè)空的倉庫(empty Git repository)初婆,細(xì)心的讀者可以發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè).git的目錄,這個(gè)目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個(gè)目錄里面的文件磅叛,不然改亂了屑咳,就把Git倉庫給破壞了。
如果你沒有看到.git目錄弊琴,那是因?yàn)檫@個(gè)目錄默認(rèn)是隱藏的兆龙,用ls -ah命令就可以看見。
3.使用
在項(xiàng)目中創(chuàng)建一個(gè)txt文本,readme.txt敲董,內(nèi)容如下:
Git is a version control system.
Git is free software.
一定要放到learngit目錄下(子目錄也行)紫皇,因?yàn)檫@是一個(gè)Git倉庫,放到其他地方Git再厲害也找不到這個(gè)文件腋寨。
和把大象放到冰箱需要3步相比聪铺,把一個(gè)文件放到Git倉庫只需要兩步。
1.用命令git add告訴Git萄窜,把文件添加到倉庫:
$ git add readme.txt
執(zhí)行上面的命令铃剔,沒有任何顯示,這就對了脂倦,Unix的哲學(xué)是“沒有消息就是好消息”番宁,說明添加成功。
2.用命令git commit告訴Git赖阻,把文件提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
簡單解釋一下git commit命令蝶押,-m后面輸入的是本次提交的說明,可以輸入任意內(nèi)容火欧,當(dāng)然最好是有意義的棋电,這樣你就能從歷史記錄里方便地找到改動記錄。
git commit命令執(zhí)行成功后會告訴你苇侵,1個(gè)文件被改動(我們新添加的readme.txt文件)赶盔,插入了兩行內(nèi)容(readme.txt有兩行內(nèi)容)。
為什么Git添加文件需要add榆浓,commit一共兩步呢于未?因?yàn)閏ommit可以一次提交很多文件,所以你可以多次add不同的文件陡鹃,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
我們已經(jīng)成功地添加并提交了一個(gè)readme.txt文件烘浦,現(xiàn)在,是時(shí)候繼續(xù)工作了萍鲸,于是闷叉,我們繼續(xù)修改readme.txt文件,改成如下內(nèi)容:
Git is a distributed version control system.
Git is free software.
現(xiàn)在脊阴,運(yùn)行g(shù)it status命令看看結(jié)果:
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
git status命令可以讓我們時(shí)刻掌握倉庫當(dāng)前的狀態(tài)握侧,上面的命令告訴我們蚯瞧,readme.txt被修改過了,但還沒有準(zhǔn)備提交的修改品擎。
雖然Git告訴我們r(jià)eadme.txt被修改了埋合,但如果能看看具體修改了什么內(nèi)容,自然是很好的孽查。比如你休假兩周從國外回來饥悴,第一天上班時(shí),已經(jīng)記不清上次怎么修改的readme.txt盲再,所以西设,需要用git diff這個(gè)命令看看:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
git diff顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式答朋,可以從上面的命令輸出看到贷揽,我們在第一行添加了一個(gè)“distributed”單詞。
知道了對readme.txt作了什么修改后梦碗,再把它提交到倉庫就放心多了禽绪,提交修改和提交新文件是一樣的兩步,第一步是git add:
$ git add readme.txt
同樣沒有任何輸出洪规。在執(zhí)行第二步git commit之前印屁,我們再運(yùn)行g(shù)it status看看當(dāng)前倉庫的狀態(tài):
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#
git status告訴我們,將要被提交的修改包括readme.txt斩例,下一步雄人,就可以放心地提交了:
$ git commit -m "add distributed"
[master ea34578] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)
提交后,我們再用git status命令看看倉庫的當(dāng)前狀態(tài):
$ git status
# On branch master
nothing to commit (working directory clean)
Git告訴我們當(dāng)前沒有需要提交的修改念赶,而且础钠,工作目錄是干凈(working directory clean)的。
Git沖突解決
git stash: 備份當(dāng)前的工作區(qū)的內(nèi)容叉谜,從最近的一次提交中讀取相關(guān)內(nèi)容旗吁,讓工作區(qū)保證和上次提交的內(nèi)容一致。同時(shí)停局,將當(dāng)前的工作區(qū)內(nèi)容保存到Git棧中很钓。
git pull:拉取服務(wù)器上的代碼;git stash pop: 從Git棧中讀取最近一次保存的內(nèi)容董栽,恢復(fù)工作區(qū)的相關(guān)內(nèi)容码倦。由于可能存在多個(gè)Stash的內(nèi)容,所以用棧來管理裆泳,pop會從最近的一個(gè)stash中讀取內(nèi)容并恢復(fù)。
git stash list: 顯示Git棧內(nèi)的所有備份柠硕,可以利用這個(gè)列表來決定從那個(gè)地方恢復(fù)工禾。
git stash clear: 清空Git棧运提。此時(shí)使用gitg等圖形化工具會發(fā)現(xiàn),原來stash的哪些節(jié)點(diǎn)都消失了闻葵。