關(guān)于版本控制
什么是“版本控制”殉农?我為什么要關(guān)心它呢?想象這么一個(gè)場(chǎng)景蟀淮,三個(gè)人同時(shí)開(kāi)發(fā)一個(gè)項(xiàng)目最住,每個(gè)人都有自己的代碼庫(kù),每個(gè)人在自己的mac上進(jìn)行代碼開(kāi)發(fā)工作怠惶。如果三個(gè)人的分工特別明確還好涨缚,各自負(fù)責(zé)各自的模塊兒,最終合代碼時(shí)以其中一個(gè)人為主導(dǎo)策治,把其他兩個(gè)人的修改的模塊兒直接替換脓魏。但是如果分工比較混亂,存在兩個(gè)甚至三個(gè)人同時(shí)修改一個(gè)文件的時(shí)候通惫,不必多說(shuō)茂翔,必然亂成一鍋粥了。其實(shí)履腋,版本控制遠(yuǎn)遠(yuǎn)不止合代碼這么簡(jiǎn)單珊燎。 版本控制是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來(lái)查閱特定版本修訂情況的系統(tǒng)遵湖。 有了它你就可以將某個(gè)文件回溯到之前的狀態(tài)悔政,甚至將整個(gè)項(xiàng)目都回退到過(guò)去某個(gè)時(shí)間點(diǎn)的狀態(tài),你可以比較文件的變化細(xì)節(jié)延旧,查出最后是誰(shuí)修改了哪個(gè)地方谋国,從而找出導(dǎo)致怪異問(wèn)題出現(xiàn)的原因,又是誰(shuí)在何時(shí)報(bào)告了某個(gè)功能缺陷等等迁沫。 使用版本控制系統(tǒng)通常還意味著芦瘾,就算你亂來(lái)一氣把整個(gè)項(xiàng)目中的文件改的改刪的刪,你也照樣可以輕松恢復(fù)到原先的樣子集畅。之前一直使用svn做版本控制旅急,現(xiàn)在逐步轉(zhuǎn)入git, 不能說(shuō)誰(shuí)好誰(shuí)壞,只能說(shuō)各有千秋
XCode初始化本地項(xiàng)目庫(kù)(公司服務(wù)器)
xcode對(duì)于git的支持還是很強(qiáng)大的牡整。一些基本的操作慷蠕,例如push, pull ,commit ,merge,新建刪除分支等都可以通過(guò)圖形界面直接完成浅役。省去了在命令框的很多操作旁蔼。
1覆获, 添加遠(yuǎn)程庫(kù)到xcode
依次點(diǎn)擊 Xcode -> Preferences -> Accounts . 彈出框左下角點(diǎn)擊+號(hào)渔彰。選擇 Add Repostory...
出現(xiàn)了倉(cāng)庫(kù)配置界面----->>>>
Address : 填寫(xiě)github上項(xiàng)目的網(wǎng)址或者公司自己的git 服務(wù)器上項(xiàng)目的地址欧芽。具體如下症脂,打開(kāi)github, 選擇自己所要添加的項(xiàng)目织鲸。點(diǎn)擊復(fù)制網(wǎng)址句占。粘貼到地址項(xiàng)沪摄。注意:如果是公司內(nèi)部自己的git lab 需要把 http://myserver /項(xiàng)目名 中的 myserver 更改為內(nèi)網(wǎng)的git項(xiàng)目的IP地址。端口號(hào)也要加入。
Autnentication : 驗(yàn)證方式杨拐, 選用 Username And Password
User Name: 你的Github 的用戶(hù)名以及密碼
點(diǎn)擊Add -- > 驗(yàn)證成功后左側(cè)的Repositories 會(huì)多出一個(gè)遠(yuǎn)程倉(cāng)庫(kù)祈餐。這個(gè)時(shí)候就可以從git 服務(wù)器上叉代碼下來(lái)盡情擼了。
2哄陶,從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼
Xcode 中依次點(diǎn)擊 Source Control -> Check out
剛才添加的代碼倉(cāng)庫(kù)出現(xiàn)在列表中帆阳。選中點(diǎn)擊Next.
選中分支,第一次添加的庫(kù)只有一個(gè)master主分支屋吨。選擇存放的位置蜒谤。然后下載即可。
3至扰,創(chuàng)建分支以及merge
多人開(kāi)發(fā)時(shí)沒(méi)開(kāi)發(fā)一個(gè)功能都自幾拉取一個(gè)分支鳍徽,在自己分支上進(jìn)行開(kāi)發(fā),功能開(kāi)發(fā)結(jié)束后merge 到主分支敢课。依次推進(jìn)阶祭,不至于污染主分支的代碼。
(1)打開(kāi)第二步叉下來(lái)的工程翎猛,查看當(dāng)前分支胖翰,并新建自己的分支:
在當(dāng)前在master分支上,通過(guò)New Branch…新建自己的分支(建議分支名以自己名字縮寫(xiě)為開(kāi)頭切厘,這樣便于區(qū)分)
(2)點(diǎn)擊Create后萨咳,則在本地新建了“cyb_photopick”分支,并且會(huì)自動(dòng)切換至新分支疫稿。至此我們基于master建好了一個(gè)本地分支培他,但是該分支并未推送到遠(yuǎn)端∫抛可以看到:
當(dāng)前遠(yuǎn)端并沒(méi)有我們新建的分支舀凛。
我們可以通過(guò) Source -> Push,將當(dāng)前分支(cyb_photopick)推送到遠(yuǎn)端途蒋。
(3)提交代碼:接下來(lái)就是進(jìn)行代碼編寫(xiě)猛遍,功能測(cè)試完畢后 Source control -> commit -> Source control -> push
(4)merge代碼:
當(dāng)我們?cè)诒镜刈约悍种贤瓿砷_(kāi)發(fā)之后,需要將代碼與master的進(jìn)行合并号坡。
4.1 首先確保自己分支的代碼已經(jīng)提交并push
4.2 切換到master分支
點(diǎn)擊switch懊烤。此時(shí)切換為主分支。
4.3 進(jìn)行代碼更新 Source Control -> pull
此時(shí)可能別的成員已經(jīng)對(duì)遠(yuǎn)端對(duì)master分支代碼進(jìn)行了合入宽堆,會(huì)有代碼沖突腌紧,解決沖突后本地master 分支已經(jīng)是最新的代碼
4.4 切回到自己的分支(cyb_photopick),過(guò)程不再贅述, 同4.2切換分支同樣的步驟畜隶。
4.5選擇Merge from Branch…: 把其他分支的代碼合入自己本地分支壁肋。這里就是把主分支的代碼合入到本地分支号胚。merge過(guò)程中可能會(huì)有沖突需要解決。
4.6 Merge into Branch... 選擇我們與哪個(gè)分支進(jìn)行合并(這里既master分支)浸遗,此merge過(guò)程可能涉及conflict解決(但是一般都 沒(méi)有conflict了猫胁,因?yàn)樯弦徊揭呀?jīng)解決了),merge完成后乙帮,分支已經(jīng)被自動(dòng)切換到master分支上了杜漠。
4.7 注意以上切換到本地分支之后的所有操作均為本地操作。遠(yuǎn)端倉(cāng)庫(kù)并不知道這些merge的存在察净。所以還需要再進(jìn)行依次push操作驾茴。push結(jié)束后如果這個(gè)功能分支就可以刪除后重建分支開(kāi)發(fā)其他功能了。
四氢卡,git tag功能
4.1锈至、列出標(biāo)簽
$ git tag # 在控制臺(tái)打印出當(dāng)前倉(cāng)庫(kù)的所有標(biāo)簽
$ git tag -l ‘v0.1.*’ # 搜索符合模式的標(biāo)簽
4 .2、打標(biāo)簽
git標(biāo)簽分為兩種類(lèi)型:輕量標(biāo)簽和附注標(biāo)簽译秦。輕量標(biāo)簽是指向提交對(duì)象的引用,附注標(biāo)簽則是倉(cāng)庫(kù)中的一個(gè)獨(dú)立對(duì)象筑悴。建議使用附注標(biāo)簽。
4.2.1 輕量標(biāo)簽
$ git tag v0.1.2-light
4.2.1 附注標(biāo)簽
$ git tag -a v0.1.2 -m “0.1.2版本”
創(chuàng)建輕量標(biāo)簽不需要傳遞參數(shù)砚婆,直接指定標(biāo)簽名稱(chēng)即可。
創(chuàng)建附注標(biāo)簽時(shí)突勇,參數(shù)a即annotated的縮寫(xiě)装盯,指定標(biāo)簽類(lèi)型甲馋,后附標(biāo)簽名。參數(shù)m指定標(biāo)簽說(shuō)明定躏,說(shuō)明信息會(huì)保存在標(biāo)簽對(duì)象中账磺。
4.3 補(bǔ)打標(biāo)簽
$ git tag -a v0.1.1 9fbc3d0
打標(biāo)簽不必要在head之上,也可在之前的版本上打痊远,這需要知道歷史某個(gè)提交(通過(guò)git log獲劝笠ァ)拗引。
4.4 切換到標(biāo)簽
與切換分支命令相同幌衣,用git checkout [tagname]
先列出所有標(biāo)簽
$ git tag
4.5 刪除標(biāo)簽
誤打或需要修改標(biāo)簽時(shí)壤玫,需要先將標(biāo)簽刪除哼凯,再打新標(biāo)簽。
$ git tag -d v0.1.2 # 刪除標(biāo)簽
參數(shù)d即delete的縮寫(xiě)猎贴,意為刪除其后指定的標(biāo)簽蝴光。
給指定的commit打標(biāo)簽
打標(biāo)簽不必要在head之上,也可在之前的版本上打趁耗,這需要你知道某個(gè)提交對(duì)象的校驗(yàn)和(通過(guò)git log獲冉椤)。
4.6 標(biāo)簽發(fā)布
git push不會(huì)將標(biāo)簽對(duì)象提交到git服務(wù)器径簿,我們需要進(jìn)行顯式的操作:
$ git push origin v0.1.2 # 將v0.1.2標(biāo)簽提交到git服務(wù)器
$ git push origin –tags # 將本地所有標(biāo)簽一次性提交到git服務(wù)器
再用git show命令可以查看標(biāo)簽的版本信息:
gitshow v0.1.2再切換標(biāo)簽 git checkout v0.1.2