隨筆
Git介紹
Git是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。Git組成部分:

SVN是集中式的,Git是分布式的。集中式就是所有的代碼都存儲在中央服務(wù)器,分布式就是每臺電腦都是中央服務(wù)器。

使用Git分支開發(fā)流程
從一般開發(fā)者的角度來看,git有以下功能:
- 從服務(wù)器上克隆完整的Git倉庫(包括代碼和版本信息)到單機(jī)上。
- 在自己的機(jī)器上根據(jù)不同的開發(fā)目的,創(chuàng)建分支,修改代碼。
- 在單機(jī)上自己創(chuàng)建的分支上提交代碼。
- 在單機(jī)上合并分支。
- 把服務(wù)器上最新版的代碼fetch下來,然后跟自己的主分支合并。
- 生成補(bǔ)丁(patch),把補(bǔ)丁發(fā)送給主開發(fā)者。
- 看主開發(fā)者的反饋,如果主開發(fā)者發(fā)現(xiàn)兩個一般開發(fā)者之間有沖突(他們之間可以合作解決的沖突),就會要求他們先解決沖突,然后再由其中一個人提交。如果主開發(fā)者可以自己解決,或者沒有沖突,就通過。
- 一般開發(fā)者之間解決沖突的方法,開發(fā)者之間可以使用pull 命令解決沖突,解決完沖突之后再向主開發(fā)者提交補(bǔ)丁。
從主開發(fā)者的角度(假設(shè)主開發(fā)者不用開發(fā)代碼)看,git有以下功能:
- 查看郵件或者通過其它方式查看一般開發(fā)者的提交狀態(tài)。
- 打上補(bǔ)丁,解決沖突(可以自己解決,也可以要求開發(fā)者之間解決以后再重新提交,如果是開源項(xiàng)目,還要決定哪些補(bǔ)丁有用,哪些不用)。
- 向公共服務(wù)器提交結(jié)果,然后通知所有開發(fā)人員。
日常開發(fā)流程:


Git安裝配置
本地下載安裝
公司內(nèi)可能會把Github封掉了,所以使用淘寶提供的鏡像下載
下載地址:http://npm.taobao.org/mirrors/git-for-windows/
安裝方法參考:https://www.cnblogs.com/wj-1314/p/7993819.html
遠(yuǎn)程倉庫配置ssh密鑰:
- 打開本地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次回車,在C:\Users\1805xxxx.ssh 目錄下最后得到了兩個文件:id_rsa和id_rsa.pub,其中id_rsa.pub就是需要配置到遠(yuǎn)程倉庫的公鑰,打開復(fù)制ssh-rsa這段代碼,再進(jìn)入遠(yuǎn)程Git倉庫進(jìn)行配置。


- 遠(yuǎn)程Git倉庫配置
創(chuàng)建遠(yuǎn)程Git倉庫
公司GitLab地址:http://opensource.cnxxxx.com/ (公司內(nèi)網(wǎng))
首先新建一個Git倉庫:填寫項(xiàng)目名稱和項(xiàng)目描述,可見等級根據(jù)自己需求定義。
新建項(xiàng)目

項(xiàng)目管理


本地IDEA使用Git
先測試本地環(huán)境Git是否安裝成功,在設(shè)置里找到Git—Test

工作開始前都先把代碼從github庫上拉取下來,更新自己的代碼,避免別人修改過的代碼與自己的有沖突,必須要養(yǎng)成這樣一個良好的習(xí)慣。
clone
拿到git路徑,打開IDEA,選擇Checkout form Version Control,檢出倉庫到本地:

在URL中輸入git地址,點(diǎn)擊Test進(jìn)行測試連接,下邊Director選擇自己的工作空間,連接成功后,點(diǎn)擊Clone按鈕,即可將遠(yuǎn)程倉庫克隆到本地。

.gitignore
按照規(guī)則忽略文件
安裝.ignore插件,配置.gitignore文件

安裝完以后可以看到與規(guī)則匹配的文件都變成灰色了,即使修改了也不會被提交。

add
在項(xiàng)目中新建文件的時候,IDEA會詢問是否將該文件加入版本控制,如果選擇了是,那么就相當(dāng)于執(zhí)行了add命令,文件名會變綠色,如果選擇了否,那么文件名會變紅色,未加入版本控制。
新建文件時,未加入版本控制:

選擇Yes,加入版本控制,文件名會變綠色:

commit

進(jìn)行文件的提交,提交文件后,可以在IDEA提供的版本控制里邊查看當(dāng)前分支開發(fā)情況:
localMaster為我自己本地建的分支。origin/master為遠(yuǎn)程主分支。

這個時候,只在自己本地倉庫存在該文件,遠(yuǎn)程Git倉庫并不存在。
fetch
比如這個時候有人在該package下提交了另外一個文件,并提交到了遠(yuǎn)程倉庫,遠(yuǎn)程倉庫多了RemoteGitTest.java文件,但是并不影響本地。如果要同步遠(yuǎn)程倉庫的代碼,需要使用fetch命令。

該命令會將遠(yuǎn)程倉庫的代碼同步下來,但是并不會合并。

可以看到最左側(cè)為主分支,然后自己的本地分支突出來了。
pull
pull和fetch命令都是從遠(yuǎn)程倉庫拉取代碼,但是fetch相當(dāng)于是從遠(yuǎn)程獲取最新版本到本地,但不會自動merge。pull是會自動fetch,并且merge代碼。
如果需要有選擇的合并git fetch是更好的選擇。效果相同時git pull將更為快捷。
merge
現(xiàn)在本地倉庫和遠(yuǎn)程倉庫有了不同,為了提交代碼,必須先將代碼進(jìn)行合并,在IDEA右下角,是有當(dāng)前分支的名稱的,可以快速進(jìn)行切換自己的本地分支。

切換到本地的主分支,然后點(diǎn)擊遠(yuǎn)程分支,選擇Merge into Current,將遠(yuǎn)程分支合并到本地。這樣,該分支就是包含遠(yuǎn)程代碼的最新代碼。

合并后,如果有沖突需要解決沖突,最后在控制臺可以看到如下:

繼續(xù)修改本地文件,可以看到現(xiàn)在就在一個分支上了。

push
合并完代碼后,現(xiàn)在代碼都是存放在自己的本地電腦中的,其他人并看不到,所以需要推送到遠(yuǎn)程倉庫,讓所有人都看到。

點(diǎn)擊push后會出現(xiàn)Push Commits的窗口,里邊都是自己本地倉庫的提交記錄,右側(cè)是修改過的文件,點(diǎn)擊下邊的Push,即可推送到遠(yuǎn)程倉庫。

推送完成后,在IDEA右下角會顯示推送成功的消息:

然后看本地控制臺:標(biāo)簽都到了同一位置,說明本地與遠(yuǎn)程代碼保持了一致。

branch
有時候會接到多個開發(fā)任務(wù),但是這多個開發(fā)任務(wù)修改的是不同位置的代碼,這個時候可以快速拉取多個分支,然后分別完成不同的開發(fā)任務(wù)。
選擇某一個分支,點(diǎn)擊checkout As... 意思是從遠(yuǎn)程分支拉取一個新的分支

我這里拉取了一個test分支

點(diǎn)擊ok,右下角自動給你切換到test分支,并且本地分支欄也多了test分支

如果想切回其他分支,只需要選中其他分支,然后點(diǎn)擊Checkout即可快速切換到另一個分支。兩邊修改的代碼互不影響。

以上就是在IDEA中快速進(jìn)行分支開發(fā)。
SourceTree進(jìn)行Git管理
SourceTree只是通過UI的方式來方便進(jìn)行版本管理,實(shí)際上和使用Git Bash寫腳本命令一樣就,增加了交互式界面,操作也更安全些。
1.下載sourcetree
https://dl.softmgr.qq.com/original/Development/SourceTreeSetup-3.2.6.exe
下載后安裝默認(rèn)安裝,需要修改一些文件,才能跳過驗(yàn)證,破解安裝,步驟如下:
- 初次啟動sourcetree
會在個人目錄生成 C:\Users\1805xxxx\AppData\Local\Atlassian,注意你的個人目錄

如果看不到是因?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.再次啟動安裝程序
默認(rèn)安裝,跳過了注冊界面,由于我們將使用git客戶端,因此選擇我不想使用Mercurial即可。
配置SourceTree
配置token

之后就可以開始項(xiàng)目開發(fā)版本管理了,例如開始拉取一個項(xiàng)目,注意一般開始使用dev分支,確認(rèn)沒問題的代碼才會合并到master上
clone

就可以把遠(yuǎn)程Git倉庫下的項(xiàng)目克隆島本地就行管理了,其他具體用法可以參考網(wǎng)上的教程。
以上就是Git的安裝和使用的一些記錄。