隨筆
Git介紹
Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。Git組成部分:
SVN是集中式的,Git是分布式的。集中式就是所有的代碼都存儲(chǔ)在中央服務(wù)器,分布式就是每臺(tái)電腦都是中央服務(wù)器。
使用Git分支開(kāi)發(fā)流程
從一般開(kāi)發(fā)者的角度來(lái)看,git有以下功能:
- 從服務(wù)器上克隆完整的Git倉(cāng)庫(kù)(包括代碼和版本信息)到單機(jī)上。
- 在自己的機(jī)器上根據(jù)不同的開(kāi)發(fā)目的,創(chuàng)建分支,修改代碼。
- 在單機(jī)上自己創(chuàng)建的分支上提交代碼。
- 在單機(jī)上合并分支。
- 把服務(wù)器上最新版的代碼fetch下來(lái),然后跟自己的主分支合并。
- 生成補(bǔ)丁(patch),把補(bǔ)丁發(fā)送給主開(kāi)發(fā)者。
- 看主開(kāi)發(fā)者的反饋,如果主開(kāi)發(fā)者發(fā)現(xiàn)兩個(gè)一般開(kāi)發(fā)者之間有沖突(他們之間可以合作解決的沖突),就會(huì)要求他們先解決沖突,然后再由其中一個(gè)人提交。如果主開(kāi)發(fā)者可以自己解決,或者沒(méi)有沖突,就通過(guò)。
- 一般開(kāi)發(fā)者之間解決沖突的方法,開(kāi)發(fā)者之間可以使用pull 命令解決沖突,解決完沖突之后再向主開(kāi)發(fā)者提交補(bǔ)丁。
從主開(kāi)發(fā)者的角度(假設(shè)主開(kāi)發(fā)者不用開(kāi)發(fā)代碼)看,git有以下功能:
- 查看郵件或者通過(guò)其它方式查看一般開(kāi)發(fā)者的提交狀態(tài)。
- 打上補(bǔ)丁,解決沖突(可以自己解決,也可以要求開(kāi)發(fā)者之間解決以后再重新提交,如果是開(kāi)源項(xiàng)目,還要決定哪些補(bǔ)丁有用,哪些不用)。
- 向公共服務(wù)器提交結(jié)果,然后通知所有開(kāi)發(fā)人員。
日常開(kāi)發(fā)流程:
Git安裝配置
本地下載安裝
公司內(nèi)可能會(huì)把Github封掉了,所以使用淘寶提供的鏡像下載
下載地址:http://npm.taobao.org/mirrors/git-for-windows/
安裝方法參考:https://www.cnblogs.com/wj-1314/p/7993819.html
遠(yuǎn)程倉(cāng)庫(kù)配置ssh密鑰:
- 打開(kāi)本地Git Bash
設(shè)置Git的user name和email:(如果是第一次的話)
$ git config --global user.name "1805xxxx"
$ git config --global user.email [1805xxxx@cnxxxx.com](mailto:1805xxxx@cnxxxx.com)
- 創(chuàng)建 SSH Key
$ ssh-keygen -t rsa -C [1805xxxx@cnxxxx.com](mailto:1805xxxx@cnxxxx.com)
連續(xù)3次回車(chē),在C:\Users\1805xxxx.ssh 目錄下最后得到了兩個(gè)文件:id_rsa和id_rsa.pub,其中id_rsa.pub就是需要配置到遠(yuǎn)程倉(cāng)庫(kù)的公鑰,打開(kāi)復(fù)制ssh-rsa這段代碼,再進(jìn)入遠(yuǎn)程Git倉(cāng)庫(kù)進(jìn)行配置。
- 遠(yuǎn)程Git倉(cāng)庫(kù)配置
創(chuàng)建遠(yuǎn)程Git倉(cāng)庫(kù)
公司GitLab地址:http://opensource.cnxxxx.com/ (公司內(nèi)網(wǎng))
首先新建一個(gè)Git倉(cāng)庫(kù):填寫(xiě)項(xiàng)目名稱(chēng)和項(xiàng)目描述,可見(jiàn)等級(jí)根據(jù)自己需求定義。
新建項(xiàng)目
項(xiàng)目管理
本地IDEA使用Git
先測(cè)試本地環(huán)境Git是否安裝成功,在設(shè)置里找到Git—Test
工作開(kāi)始前都先把代碼從github庫(kù)上拉取下來(lái),更新自己的代碼,避免別人修改過(guò)的代碼與自己的有沖突,必須要養(yǎng)成這樣一個(gè)良好的習(xí)慣。
clone
拿到git路徑,打開(kāi)IDEA,選擇Checkout form Version Control,檢出倉(cāng)庫(kù)到本地:
在URL中輸入git地址,點(diǎn)擊Test進(jìn)行測(cè)試連接,下邊Director選擇自己的工作空間,連接成功后,點(diǎn)擊Clone按鈕,即可將遠(yuǎn)程倉(cāng)庫(kù)克隆到本地。
.gitignore
按照規(guī)則忽略文件
安裝.ignore插件,配置.gitignore文件
安裝完以后可以看到與規(guī)則匹配的文件都變成灰色了,即使修改了也不會(huì)被提交。
add
在項(xiàng)目中新建文件的時(shí)候,IDEA會(huì)詢(xún)問(wèn)是否將該文件加入版本控制,如果選擇了是,那么就相當(dāng)于執(zhí)行了add命令,文件名會(huì)變綠色,如果選擇了否,那么文件名會(huì)變紅色,未加入版本控制。
新建文件時(shí),未加入版本控制:
選擇Yes,加入版本控制,文件名會(huì)變綠色:
commit
進(jìn)行文件的提交,提交文件后,可以在IDEA提供的版本控制里邊查看當(dāng)前分支開(kāi)發(fā)情況:
localMaster為我自己本地建的分支。origin/master為遠(yuǎn)程主分支。
這個(gè)時(shí)候,只在自己本地倉(cāng)庫(kù)存在該文件,遠(yuǎn)程Git倉(cāng)庫(kù)并不存在。
fetch
比如這個(gè)時(shí)候有人在該package下提交了另外一個(gè)文件,并提交到了遠(yuǎn)程倉(cāng)庫(kù),遠(yuǎn)程倉(cāng)庫(kù)多了RemoteGitTest.java文件,但是并不影響本地。如果要同步遠(yuǎn)程倉(cāng)庫(kù)的代碼,需要使用fetch命令。
該命令會(huì)將遠(yuǎn)程倉(cāng)庫(kù)的代碼同步下來(lái),但是并不會(huì)合并。
可以看到最左側(cè)為主分支,然后自己的本地分支突出來(lái)了。
pull
pull和fetch命令都是從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼,但是fetch相當(dāng)于是從遠(yuǎn)程獲取最新版本到本地,但不會(huì)自動(dòng)merge。pull是會(huì)自動(dòng)fetch,并且merge代碼。
如果需要有選擇的合并git fetch是更好的選擇。效果相同時(shí)git pull將更為快捷。
merge
現(xiàn)在本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)有了不同,為了提交代碼,必須先將代碼進(jìn)行合并,在IDEA右下角,是有當(dāng)前分支的名稱(chēng)的,可以快速進(jìn)行切換自己的本地分支。
切換到本地的主分支,然后點(diǎn)擊遠(yuǎn)程分支,選擇Merge into Current,將遠(yuǎn)程分支合并到本地。這樣,該分支就是包含遠(yuǎn)程代碼的最新代碼。
合并后,如果有沖突需要解決沖突,最后在控制臺(tái)可以看到如下:
繼續(xù)修改本地文件,可以看到現(xiàn)在就在一個(gè)分支上了。
push
合并完代碼后,現(xiàn)在代碼都是存放在自己的本地電腦中的,其他人并看不到,所以需要推送到遠(yuǎn)程倉(cāng)庫(kù),讓所有人都看到。
點(diǎn)擊push后會(huì)出現(xiàn)Push Commits的窗口,里邊都是自己本地倉(cāng)庫(kù)的提交記錄,右側(cè)是修改過(guò)的文件,點(diǎn)擊下邊的Push,即可推送到遠(yuǎn)程倉(cāng)庫(kù)。
推送完成后,在IDEA右下角會(huì)顯示推送成功的消息:
然后看本地控制臺(tái):標(biāo)簽都到了同一位置,說(shuō)明本地與遠(yuǎn)程代碼保持了一致。
branch
有時(shí)候會(huì)接到多個(gè)開(kāi)發(fā)任務(wù),但是這多個(gè)開(kāi)發(fā)任務(wù)修改的是不同位置的代碼,這個(gè)時(shí)候可以快速拉取多個(gè)分支,然后分別完成不同的開(kāi)發(fā)任務(wù)。
選擇某一個(gè)分支,點(diǎn)擊checkout As... 意思是從遠(yuǎn)程分支拉取一個(gè)新的分支
我這里拉取了一個(gè)test分支
點(diǎn)擊ok,右下角自動(dòng)給你切換到test分支,并且本地分支欄也多了test分支
如果想切回其他分支,只需要選中其他分支,然后點(diǎn)擊Checkout即可快速切換到另一個(gè)分支。兩邊修改的代碼互不影響。
以上就是在IDEA中快速進(jìn)行分支開(kāi)發(fā)。
SourceTree進(jìn)行Git管理
SourceTree只是通過(guò)UI的方式來(lái)方便進(jìn)行版本管理,實(shí)際上和使用Git Bash寫(xiě)腳本命令一樣就,增加了交互式界面,操作也更安全些。
1.下載sourcetree
https://dl.softmgr.qq.com/original/Development/SourceTreeSetup-3.2.6.exe
下載后安裝默認(rèn)安裝,需要修改一些文件,才能跳過(guò)驗(yàn)證,破解安裝,步驟如下:
- 初次啟動(dòng)sourcetree
會(huì)在個(gè)人目錄生成 C:\Users\1805xxxx\AppData\Local\Atlassian,注意你的個(gè)人目錄
如果看不到是因?yàn)锳ppData是隱藏文件夾
- 關(guān)閉sourcetree安裝驗(yàn)證
C:\Users\1805xxxx\AppData\Local\Atlassian\SourceTree下創(chuàng)建名為accounts.json的文件
[{
"$id": "1",
"$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"$id": "2",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"$id": "3",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"$id": "4",
"$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}]
- 修改user.config
然后在進(jìn)入C:\Users\1805xxxx\AppData\Local\Atlassian\SourceTree.exe_Url_dbhf2dawcrrrvxjjwvb2mxghqxuehspc\3.2.6.3544
修改user.config內(nèi)容,增加下面代碼:
<setting name="AgreedToEULA" serializeAs="String">
<value>True</value>
</setting>
<setting name="AgreedToEULAVersion" serializeAs="String">
<value>20160201</value>
</setting>
4.再次啟動(dòng)安裝程序
默認(rèn)安裝,跳過(guò)了注冊(cè)界面,由于我們將使用git客戶(hù)端,因此選擇我不想使用Mercurial即可。
配置SourceTree
配置token
之后就可以開(kāi)始項(xiàng)目開(kāi)發(fā)版本管理了,例如開(kāi)始拉取一個(gè)項(xiàng)目,注意一般開(kāi)始使用dev分支,確認(rèn)沒(méi)問(wèn)題的代碼才會(huì)合并到master上
clone
就可以把遠(yuǎn)程Git倉(cāng)庫(kù)下的項(xiàng)目克隆島本地就行管理了,其他具體用法可以參考網(wǎng)上的教程。
以上就是Git的安裝和使用的一些記錄。