楔子
前一段時間公司的源代碼管理從SVN過渡到了Git。其實在大三的時候,老師就叫我們學過Git,但是那個時候也只是漫無目的的在網(wǎng)上找一些關(guān)于Git的教程來看,不過大都沒看出個所以然來。
自從實習這五個月以來,我真正體會到了一個道理:學習東西最快的方式就是實踐它。以前我學習一個東西總是從基本概念起,要完完全全搞懂它的每一個知識點。那樣我才認為是自己學會了。但現(xiàn)在回過頭想一想,其實這樣是最慢的方式。身邊那一些學習比較快的同事和同學們,他們都是立即去實踐,然后就懂了。
其實我也是在公司必須用Git的時候才感覺一下子明白了好多以前看的概念。所以,如果正在看這篇文章的你也還不太懂什么是Git的話,別再一遍又一遍的看概念了,Just do it!
SVN之旅
6月份到公司的時候,公司項目還是在用SVN進行源代碼管理。我們iOS項目使用的是MAC下一個比較好用的SVN客戶端:Cornerstone
界面美觀又好用,現(xiàn)在不用了還真有點懷念呢。不過是收費軟件,網(wǎng)上可以找到破解的。
Git之旅
Git我使用的是SourceTree客戶端。
這個軟件有中文版,也非常好用,支持Windows和Mac雙平臺。而且是免費的,不要猶豫,馬上下載下來使用吧。
代碼托管平臺除了最強大的GitHub外,我們國內(nèi)也還有一些第三方Git平臺,比如Coding,碼云等等,結(jié)合這些網(wǎng)站配上SourceTree創(chuàng)建你的第一個Git項目吧,然后慢慢練習。
基礎(chǔ)教程我就不寫了,這篇文章只記錄我在使用Git過程中遇到的問題以及解決辦法。但是可以給大家推薦一些我看過的比較好的教程。(但千萬不要奢求你能全部看懂,最好是看個大概,用一段時間后再回過頭來看)
Git之旅,現(xiàn)在開始:
可以忽略的文件:
-
xcuserdata
文件夾下的所有文件,這些文件都是Xcode記錄的你的一些操作數(shù)據(jù),無需上傳到git分享給同事 - 不可以忽略的文件:
-
project.pbxproj
這個文件是記錄的項目的目錄結(jié)構(gòu),當你新增,刪除了文件甚至是拖動了某一文件的順序這個文件都會改變 - 當有一些文件無法忽略的時候:
使用SourceTree的時候會出現(xiàn)有的文件無法點擊忽略(忽略二字是灰色的,不可點擊)這是因為Git服務器上已經(jīng)有這個文件了,你不能忽略它。如果你還是想忽略它,可以在項目中找到這個文件,把它刪除掉,再重新commit一次,commit后這個文件就可以點擊忽略了。
如果你曾經(jīng)上傳過.DS_Store文件到Git上,現(xiàn)在想要忽略它,你就必須先刪除.DS_Store文件。(.DS_Store是隱藏文件,它主要存儲一些文件屬性。不需要上傳到Git)
刪除.DS_Store文件方法:
執(zhí)行命令:
sudo find / -name “.DS_Store” -depth -exec rm {} \;
Git使用原則:
一般的小項目的原則是至少要有兩個分支
- dev分支:平時開發(fā)的修改都提交到這個分支
- master分支:始終保持一個可以運行的穩(wěn)定正式版,當發(fā)布新版本時才把dev分支合并到master分支
dev分支如何合并到master分支:
先檢出(checkout)到master分支,再點擊合并(merge),選擇分支為dev分支
(檢出到某分支其實就是選中某分支進行操作的意思)
git checkout master
git merge dev
Git中如何實現(xiàn)遠程倉庫回滾:
- 先checkout到本地的對應分支
-
git reset --hard HEAD^
本地分支reset到上一個版本(HEAD^可以換為commit ID) -
git push origin dev -f
將本地分支push到遠程分支(因為本地版本低于遠程版本,所以必須加上-f強制push)
注意:必須擁有管理員權(quán)限才能強制推送受保護的分支(如master分支)
解決Push時的代碼沖突
當甲乙都修改了同一份文件,甲push了,乙pull的時候就會報錯:
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
解決辦法:
- 笨辦法:檢查報錯的那個具體文件,將自己修改的部分記下來備份到一邊,再reset該文件,重新pull,再將自己的修改添加到該文件上,重新push,搞定?。ㄌ热裟阆敕艞壞愕男薷模梢灾苯觬eset該文件,然后pull)
- 正確辦法:命令行執(zhí)行
git stash //暫存自己的修改在Git棧
git pull //拉取遠端
git stash pop //從Git棧中恢復自己的修改
到此,解決沖突。如果仍未解決,可能是你們修改了同一個文件的同一個地方,這就必須手動解決這部分沖突了。
附送:
git stash list 查看所有暫存
git stash clear 清楚所有暫存