以前剛剛接觸SourceTree的時(shí)候,覺得很簡單,遇到?jīng)_突了去包文件里面刪掉那些明顯的標(biāo)記,然后在誰也不知道誰刪掉了誰的文件的情況下,只要不報(bào)沖突就算是自己給自己的版本推上去了,這樣明顯不是SourceTree的初衷
(其實(shí)我以前就是這么干的...現(xiàn)在覺得自己還是too young too naive...)
幸好,在我的老大Thomas的指引下,和我的好同事Poul的共同探討+實(shí)踐下,應(yīng)該算是弄明白了SoucreTree的使用
大家都知道git是分布式的代碼管理工具,理論上面大家都明白,可是實(shí)踐高于理論,那么請嘗試著采用以下的方法來理解它的原理吧!
準(zhǔn)備工作
第一步:創(chuàng)建自己的本地分支
(服務(wù)器配置工作暫時(shí)不說了,這不是本文的重點(diǎn))
你需要打開SourceTree,注意右側(cè)BRANCHES,REMOTES,(如果你是第一次使用SourceTree的話,這個(gè)BRANCHES的類目下面基本上只有一個(gè)master,這個(gè)master是本地的master,REMOTES這個(gè)類目下也有一個(gè)master,這是服務(wù)器遠(yuǎn)端的master)
關(guān)鍵點(diǎn):我們在BRANCHES這個(gè)類目下新建一個(gè)branch
方法如下圖:

為了代碼管理的方便,我們盡量遵循
- 只能讓本地的master向遠(yuǎn)端的master進(jìn)行提交工作
- 忽略工程中二進(jìn)制文件的改動(建議將二進(jìn)制文件與代碼文件區(qū)分路徑存放,這樣在暫存的文件中我們比較容易識別出哪些文件可以不進(jìn)行commit,以避免不必要的沖突)
- 還有不得不說的是,盡量在提交和合并的時(shí)候完全Quit出XCODE
工作流程
上班第一件事:merge
上班第一件事就是從服務(wù)器拉取其他同事的代碼到本地進(jìn)行merge
我們所要做的就是按照如下進(jìn)行:
- 右擊自己新建的DEV,選擇checkout到master上,(如果已經(jīng)是master就不需要切換了----如何分辨出當(dāng)前在哪個(gè)分支下?答:當(dāng)前的分支是粗黑體)中文版本為檢出到master
- 然后點(diǎn)擊fetch,從遠(yuǎn)端獲取最新動態(tài)
- 然后點(diǎn)擊merge,選中到最新的節(jié)點(diǎn),OK即可
- 最后再checkout到自己新建的DEV,右擊master選擇merge master into DEV
這樣就完成了合并代碼
下班最后一件事:commit
務(wù)必記住在開始代碼編寫工作前請先checkout到DEV,直到工作完成,我們來commit代碼
- commit自己寫的的文件,這樣自己的文件就被提交到了自己的DEV分支中
- checkout到master,然后右擊DEV,選擇merge DEV into master
- 將working space中不需要commit的文件或者需要解決沖突的文件discard掉
- push到遠(yuǎn)端即commit成功
- 注意提交成功后切換到DEV
最后附上一些參考資料,感興趣的可以看看
感謝你們!
2016.2.24補(bǔ)充:
當(dāng)我編寫代碼完成,發(fā)現(xiàn)遠(yuǎn)端有新動態(tài),此時(shí)的操作:
- 先將Working Copy中需要commit的文件commit到DEV上(在comment區(qū)域做上自己的版本注釋)
- 切換到master上,選擇merge DEV into master(此時(shí)SourceTree會告訴你,你當(dāng)前落后了多少超前了多少,如果沒有這樣的提示,就fetch一下遠(yuǎn)端)
- 進(jìn)行merge(將本地的master與遠(yuǎn)端的master進(jìn)行合并)
- 沒有問題,push到遠(yuǎn)端
- 切換到DEV,選擇merge master into DEV
2016.3.2補(bǔ)充一:
除了使用merge的方式和代碼,還有一種是rebase,探索中......
2016.3.2補(bǔ)充二:(IMPORTANT----可有效避免沖突的發(fā)生頻率)

在SourceTree的設(shè)置中,如上圖修改文件為以下文件
Mac OSX
*.DS_Store
Xcode
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
*.xcuserstate
project.xcworkspace/
xcuserdata/
#Git
.gitingore
.gitingore.swp
2016.3.8補(bǔ)充:
盡量不要使用pull,我的理解是pull是一種強(qiáng)制將遠(yuǎn)端拉取下來,所以盡量使用fetch吧,這樣才能更好的合代碼
另外,在遇到?jīng)_突時(shí),可以進(jìn)workingcopy去看看是什么文件沖突,右邊會有紅綠色塊,并且也會有沖突標(biāo)記,在這里,你可以進(jìn)行選擇性discard(丟棄)不需要的代碼來解決沖突
按照上述的工作方式,我已經(jīng)和同事合作了一段時(shí)間,效果還不錯(cuò),給我們的工作帶來很多便利
如果有任何問題可以問我,我盡量解決~O(∩_∩)O