git這個(gè)工具呢,是用于版本管理的,一個(gè)人開(kāi)發(fā)的時(shí)候可能沒(méi)有什么影響,都是你一個(gè)人在管理和維護(hù).但是當(dāng)你進(jìn)入一個(gè)團(tuán)隊(duì)后那么就變得不同了,共同開(kāi)發(fā)一個(gè)項(xiàng)目那么你就要與別人協(xié)作,完成開(kāi)發(fā)的相關(guān)工作.所以問(wèn)題來(lái)了.你寫(xiě)的代碼和別人寫(xiě)的代碼怎么合到一起呢,對(duì),我們有ctrl+c,ctrl+v,這個(gè)操作我還是會(huì)的.那么如果修改的是同一個(gè)文件呢,那么是不是要選取更合理的,替換掉原來(lái)的代碼.想想都是一個(gè)非常繁瑣的工作.有這個(gè)需求,那么就市場(chǎng),有市場(chǎng)就會(huì)有人去開(kāi)發(fā)這個(gè)工具,所以相關(guān)的管理工具就出來(lái)了.其中用的較多的有svn,git.現(xiàn)在來(lái)說(shuō)更多的用的還是git.至于為什么這里就不多說(shuō)了,這里只講用法,原理有機(jī)會(huì)再說(shuō).
這里針對(duì)的是剛出來(lái)工作的大學(xué)生,因?yàn)樵趯W(xué)校里的開(kāi)發(fā),更多的還是個(gè)人,沒(méi)有用到git這類工具(當(dāng)然這里說(shuō)的是大多數(shù)的).所以剛?cè)肼毠?要學(xué)的就是git這個(gè)版本管理工具.這里算是提前給大家補(bǔ)充這塊的知識(shí),學(xué)會(huì)了進(jìn)入公司,要少花一點(diǎn)時(shí)間,同時(shí)也是讓自的開(kāi)發(fā)更加的規(guī)范.
只講常用的命令,不常用的不講.
安裝這里也不講了,用windows的多,所以下一個(gè).exe文件,傻瓜式的下一步,解決問(wèn)題.
講一下安裝完成后的操作.
- 克隆代碼的命令,這個(gè)是一定得會(huì)的,因?yàn)榈谝淮文闳ダ〈a就是用的這個(gè)命令.別再用那種下壓縮包來(lái)解壓這種操作了,看著真的太low了.直接git clone 加地址就可以了.
地址有兩種形式.
// http的
https://github.com/MengTo/Spring.git
git clone https://github.com/MengTo/Spring.git
// ssh的
git@github.com:MengTo/Spring.git
git clone git@github.com:MengTo/Spring.git
去拉這種開(kāi)源項(xiàng)目沒(méi)有什么問(wèn)題,但是如果是公司私有的,那么你一定要在項(xiàng)目組中才行.
- 然后就開(kāi)取開(kāi)發(fā),編寫(xiě)代碼,之后怎么提交問(wèn)題.
在提交之前要做一個(gè)事情,那就是完善一下個(gè)人信息,要不交上去了,誰(shuí)知道是你提交的.要用到兩個(gè)命令.其實(shí)也就是對(duì)配置文件的更改,所以可以直接更改配置文件,當(dāng)然不去動(dòng)配置文件,那么直接用命令修改要更改的配置也行.
git config --global(這個(gè)是圖個(gè)方便,如果這電腦多個(gè)人在使用,同時(shí)開(kāi)發(fā)不同的項(xiàng)目,那么就不要用這個(gè)參數(shù)了.這是全局變量) user.name "手握日月摘星晨,世間無(wú)我這般人",這名字真好.
git config --global user.mail "nb@gamil.com"
這樣就可以了.
克隆下來(lái)的項(xiàng)目,一般來(lái)說(shuō)項(xiàng)目的倉(cāng)庫(kù)地址是配置好的,那么就可以不用配置了.不過(guò)也有直接開(kāi)發(fā)的項(xiàng)目,然后直接往倉(cāng)庫(kù)推的,那么就有一個(gè)添加倉(cāng)庫(kù)地址的命令.
// 先查看一下有沒(méi)有地址
git remote -v
看這是添加好的,如果沒(méi)有怎么添加呢.
git remote add 名稱 地址
eg: git remote add dev git@github.com:MengTo/Spring.git
//加錯(cuò)了怎么辦,那就刪除嘛
git remote remove dev(這里直接給名稱就可以了)
//然后要做的是新建一個(gè)分支,因?yàn)椴粫?huì)直接在develop分支上面直接做開(kāi)發(fā)的,如果你遇到這樣的公司那么直接跑路,因?yàn)樘灰?guī)范了.以下就涉及到分支的概念了.
一般有以下的兩種
- 一種是直接fork到自已帳戶下,然后開(kāi)發(fā),再merge倉(cāng)庫(kù)的代碼,然后推上去,提mergerequest.管理員審核,如果可以,就會(huì)合代碼.
- 另一種就是直接通過(guò)分支來(lái)解決.通過(guò)拉新的分支來(lái)開(kāi)發(fā),然后merge開(kāi)發(fā)分支,之后提交代碼提合并請(qǐng)求.
但是共同點(diǎn)都是要先merge,再提交.
這里要先講一下分支的操作:
//查看分支列表.(-l (local)本地 -a (all)全部 -r(remote) 遠(yuǎn)端倉(cāng)庫(kù) )
git branch -l
//分支名如果存在切換到該分支,不存在則新建.(新建的規(guī)則是從當(dāng)前所在分支復(fù)制一分相同的代碼.)
git brach 分支名
//切換分支名一般用的這個(gè)命令
git checkout 分支名
//以上都做好了,那么就可以在寫(xiě)好代碼提交了.
提交代碼的步驟:
i .先查看文件的狀態(tài):修改過(guò)的,是紅色的,同時(shí)沒(méi)有添加到索引區(qū).
git status
ii. 然后將要提交的文件加入到索引區(qū)
git add 文件名
// 如果全部添加的話
git add .
這里又出現(xiàn)問(wèn)題了,那么我們?nèi)绻渝e(cuò)文件了怎么辦,當(dāng)然是有撤銷操作的.
//這個(gè)是刪除命令,有點(diǎn)暴力
git rm --cached 文件名
//溫柔一點(diǎn)的,不加文件名就是所有了.
git reset 文件名
iii. 如果前面的沒(méi)有問(wèn)題那就是可以提交了,commit,這樣會(huì)先暫到本地的倉(cāng)庫(kù),此時(shí)還沒(méi)有到遠(yuǎn)端倉(cāng)庫(kù).具體的命令是:
// 提交記錄:
git commit -m "提交信息"
//查看提交記錄
git log
注意了:如果一個(gè)分支你有很多次提交,比較加了一個(gè)"," 添加一行代碼,都提交,那么提交記錄是不是就很多了.
估計(jì)你領(lǐng)導(dǎo)看見(jiàn)不會(huì)太開(kāi)心,哪有這樣寫(xiě)代碼的.當(dāng)然有時(shí)候要處理別的分支的代碼而你又在開(kāi)發(fā),就暫時(shí)的保存一下,但結(jié)果就是不好看,領(lǐng)導(dǎo)也不會(huì)看過(guò)程不是.所以就有一個(gè)合并提交記錄的操作.
至此我們就完成了記錄的合并修改.涉及的命令:
//修改記錄:~~表示之前的所有,~2表示前兩次
git rebase -i HEAD~~
已經(jīng)修改了,分為兩種情況,
a. 這個(gè)分支是新建,遠(yuǎn)端倉(cāng)庫(kù)沒(méi)有,那么直接fetch一下,更新一下本地分支的代碼.
b. 如果這個(gè)分支遠(yuǎn)端倉(cāng)庫(kù)有,那么要先pull,拉取和本地的代碼比較,有沖突的地方要解決,然后再是merge,develop分支的代碼.否則代碼push到遠(yuǎn)端分支會(huì)出錯(cuò),要二次解決沖突.
git fetch
git pull
git merge origin/develop(倉(cāng)庫(kù)名/分支名)
//最后推到遠(yuǎn)端倉(cāng)庫(kù).->提merge request
git push
前面提到一個(gè)問(wèn)題.那就是如果我們臨時(shí)要切換分支,而我們的代碼以沒(méi)有開(kāi)發(fā)完,不想commit怎么辦.git提供了一個(gè)暫存的操作.
// 我新添加的沒(méi)有了,將其放到了緩存中.
//完成其他分支修改后,取出緩存中的內(nèi)容
// 涉及的命令有:
//查看緩存列表
git stash list
//存儲(chǔ)操作
git stash save "存儲(chǔ)內(nèi)容信息"
//取出緩存:pop 取出并刪除. apply是取出不刪除.
git stash pop stash@{0}
我們提交時(shí)都會(huì)遇到一個(gè)問(wèn)題,那就是commit的內(nèi)容沒(méi)有完整,想修改一下,那要怎么做呢.
git commit --amend