楔子
前一段時(shí)間公司的源代碼管理從SVN過(guò)渡到了Git钻哩。其實(shí)在大三的時(shí)候,老師就叫我們學(xué)過(guò)Git,但是那個(gè)時(shí)候也只是漫無(wú)目的的在網(wǎng)上找一些關(guān)于Git的教程來(lái)看惊窖,不過(guò)大都沒(méi)看出個(gè)所以然來(lái)。
自從實(shí)習(xí)這五個(gè)月以來(lái)厘贼,我真正體會(huì)到了一個(gè)道理:學(xué)習(xí)東西最快的方式就是實(shí)踐它界酒。以前我學(xué)習(xí)一個(gè)東西總是從基本概念起,要完完全全搞懂它的每一個(gè)知識(shí)點(diǎn)嘴秸。那樣我才認(rèn)為是自己學(xué)會(huì)了盾计。但現(xiàn)在回過(guò)頭想一想,其實(shí)這樣是最慢的方式赁遗。身邊那一些學(xué)習(xí)比較快的同事和同學(xué)們署辉,他們都是立即去實(shí)踐,然后就懂了岩四。
其實(shí)我也是在公司必須用Git的時(shí)候才感覺(jué)一下子明白了好多以前看的概念哭尝。所以,如果正在看這篇文章的你也還不太懂什么是Git的話剖煌,別再一遍又一遍的看概念了材鹦,Just do it!
SVN之旅
6月份到公司的時(shí)候逝淹,公司項(xiàng)目還是在用SVN進(jìn)行源代碼管理。我們iOS項(xiàng)目使用的是MAC下一個(gè)比較好用的SVN客戶端:Cornerstone
界面美觀又好用桶唐,現(xiàn)在不用了還真有點(diǎn)懷念呢栅葡。不過(guò)是收費(fèi)軟件,網(wǎng)上可以找到破解的尤泽。
Git之旅
Git我使用的是SourceTree客戶端欣簇。
這個(gè)軟件有中文版,也非常好用坯约,支持Windows和Mac雙平臺(tái)熊咽。而且是免費(fèi)的,不要猶豫闹丐,馬上下載下來(lái)使用吧横殴。
代碼托管平臺(tái)除了最強(qiáng)大的GitHub外,我們國(guó)內(nèi)也還有一些第三方Git平臺(tái)卿拴,比如Coding衫仑,碼云等等,結(jié)合這些網(wǎng)站配上SourceTree創(chuàng)建你的第一個(gè)Git項(xiàng)目吧堕花,然后慢慢練習(xí)惑畴。
基礎(chǔ)教程我就不寫了,這篇文章只記錄我在使用Git過(guò)程中遇到的問(wèn)題以及解決辦法航徙。但是可以給大家推薦一些我看過(guò)的比較好的教程如贷。(但千萬(wàn)不要奢求你能全部看懂,最好是看個(gè)大概到踏,用一段時(shí)間后再回過(guò)頭來(lái)看)
Git之旅杠袱,現(xiàn)在開(kāi)始:
可以忽略的文件:
-
xcuserdata
文件夾下的所有文件,這些文件都是Xcode記錄的你的一些操作數(shù)據(jù)窝稿,無(wú)需上傳到git分享給同事 - 不可以忽略的文件:
-
project.pbxproj
這個(gè)文件是記錄的項(xiàng)目的目錄結(jié)構(gòu)赴捞,當(dāng)你新增土陪,刪除了文件甚至是拖動(dòng)了某一文件的順序這個(gè)文件都會(huì)改變 - 當(dāng)有一些文件無(wú)法忽略的時(shí)候:
使用SourceTree的時(shí)候會(huì)出現(xiàn)有的文件無(wú)法點(diǎn)擊忽略(忽略二字是灰色的,不可點(diǎn)擊)這是因?yàn)镚it服務(wù)器上已經(jīng)有這個(gè)文件了,你不能忽略它珊蟀。如果你還是想忽略它辙纬,可以在項(xiàng)目中找到這個(gè)文件批什,把它刪除掉卧斟,再重新commit一次,commit后這個(gè)文件就可以點(diǎn)擊忽略了援奢。
如果你曾經(jīng)上傳過(guò).DS_Store文件到Git上兼犯,現(xiàn)在想要忽略它,你就必須先刪除.DS_Store文件。(.DS_Store是隱藏文件切黔,它主要存儲(chǔ)一些文件屬性砸脊。不需要上傳到Git)
刪除.DS_Store文件方法:
執(zhí)行命令:
sudo find / -name “.DS_Store” -depth -exec rm {} \;
Git使用原則:
一般的小項(xiàng)目的原則是至少要有兩個(gè)分支
- dev分支:平時(shí)開(kāi)發(fā)的修改都提交到這個(gè)分支
- master分支:始終保持一個(gè)可以運(yùn)行的穩(wěn)定正式版,當(dāng)發(fā)布新版本時(shí)才把dev分支合并到master分支
dev分支如何合并到master分支:
先檢出(checkout)到master分支纬霞,再點(diǎn)擊合并(merge)凌埂,選擇分支為dev分支
(檢出到某分支其實(shí)就是選中某分支進(jìn)行操作的意思)
git checkout master
git merge dev
Git中如何實(shí)現(xiàn)遠(yuǎn)程倉(cāng)庫(kù)回滾:
- 先checkout到本地的對(duì)應(yīng)分支
-
git reset --hard HEAD^
本地分支reset到上一個(gè)版本(HEAD^可以換為commit ID) -
git push origin dev -f
將本地分支push到遠(yuǎn)程分支(因?yàn)楸镜匕姹镜陀谶h(yuǎn)程版本,所以必須加上-f強(qiáng)制push)
注意:必須擁有管理員權(quán)限才能強(qiáng)制推送受保護(hù)的分支(如master分支)
解決Push時(shí)的代碼沖突
當(dāng)甲乙都修改了同一份文件诗芜,甲push了瞳抓,乙pull的時(shí)候就會(huì)報(bào)錯(cuò):
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.m
Please, commit your changes or stash them before you can merge.Aborting
解決辦法:
- 笨辦法:檢查報(bào)錯(cuò)的那個(gè)具體文件,將自己修改的部分記下來(lái)備份到一邊绢陌,再reset該文件挨下,重新pull熔恢,再將自己的修改添加到該文件上脐湾,重新push,搞定P鹛省(倘若你想放棄你的修改秤掌,可以直接reset該文件,然后pull)
- 正確辦法:命令行執(zhí)行
git stash //暫存自己的修改在Git棧
git pull //拉取遠(yuǎn)端
git stash pop //從Git棧中恢復(fù)自己的修改
到此鹰霍,解決沖突闻鉴。如果仍未解決,可能是你們修改了同一個(gè)文件的同一個(gè)地方茂洒,這就必須手動(dòng)解決這部分沖突了孟岛。
附送:
git stash list 查看所有暫存
git stash clear 清楚所有暫存