使用 Git 改进工作方式
為什么80%的碼農都做不了架構師?>>> ??
一、什么是 Git
請自行 google
二、Git 與 SVN
http://www.jianshu.com/p/bfec042349ca?這里說的都是對的
但是在實際工作中,分支即是 Git 與 SVN 沒有區別又是與 SVN 區別最大的部分,說它沒有區別是因為 SVN 也有分支,說它有區別是因為使用 Git 可以把分支的特性充分發揮而不需要花費太高成本(時間),而 SVN 的分支在實際工作中卻不是那么多人愿意去用的。
另一個有用的區別是分布式,Git 會在本地建立完事的版本庫(Local Reposity),這對混合使用 VCS 非常有幫助,你可以按照自己的想法來管理版本,建立 Git 庫的成本卻只有一句命令
git?init而后只需要保持其中一個分支與團隊中使用的版本庫同步即可。
三、接受 Git 的理念
3.1 提交=完成一小件事
首先,Git 的提交與 SVN 相比,它更鼓勵一次提交所有變更,而 SVN 可以比較方便地選擇性提交或更新部分代碼到最新版本,見到過很多開發都喜歡這么干,以保持代碼在本地能夠正常運行,但這么做的缺點也顯而易見,一是容易遺漏,不管是 commit 或 update,一旦遺漏就可能出現莫名其秒的問題,最后,噢,我怎么把 XXX 提交上去/更新了。
其次,默認情況下,Git 強制在提交時填寫提交說明,而 Svn 可以什么都不寫(出問題,你猜呀!),我也用過 SVN,在使用 SVN 的那段歲月也曾不寫任何提交說明,為什么不寫?不是不想寫,是不知道有什么好寫的,因為很多時候,提交涉及的變更可能只是某個/多個功能點改進的一部分,都不知道該怎么描述或者要描述清楚得寫一大堆,誰有這功夫,干脆不寫最方便。
代碼的變更,都是有目的的,如果我們能夠把每次代碼變更的目的想清楚,那是不是就可以根據變更目的來填寫提交說明?
Bingo,改進工作方式第一點:Coding 前想清楚目的(為了改#88號 Bug,為了增加 xxxAPI等)。讓每一次 commit 有意義,而不是把 commit 變成下班打卡。
3.2 合并=一系列事情的集合=一次有用的變更
VCS 的目的是記錄變更,便于后期追溯問題,但如果某次變更涉及的文件或變更內容過多,這將增加問題追溯的困難,那么如何才能更好地追溯問題呢?
控制粒度。為達到變更目的,并不一定都是非常簡單的變更,變更可能會涉及多個方面,比如增加一個新功能時,可能涉及到服務端 service、dao 開發、頁面功能開發,可以把其中一小件事作為一次提交,而多個提交處于同一個分支,在所有變更完成后再把分支全部合并到與團隊同步的分支上,表示完成某一件事情(業務)。
3.3 分支=隔離變更
隔離:不同分支可以按照自己的目標發展,而不需要關心其他分支的變更所產生的影響。舉個例子:當你正在為增加某一個功能點而噼里啪啦敲擊著代碼時,突然測試妹子跑來跟你說某 bug 調皮搗蛋了,你得馬上管管。沒有分支怎么辦?寫了一半的代碼是提交還是不提交?有 SVN 玩得溜的同學:嘿,你讓一讓,寫了一半的代碼當然不能提交,先看一下線上變更情況,再選擇性地更新部分代碼,然后改完 bug,再選擇性地提交只與 bug 相關的代碼,搞定!OMG,這也行?還真行,就是比較費腦子,本來 VCS 該干的活全讓這位同學給干了。換成分支會是什么情況?
git?add?. git?ci?-am?'Template?commit'?#use?git?ci?--amend?fix?template?commit git?co?master?#any?problem?branch #fix?problem git?add?. git?ci?-am?'Fixes?#88' git?co?feature-yourbranch #continue?coding...別看這么一堆代碼,想要表達的意思很簡單:切換到問題分支,改完提交,再換回當前分支繼續之前的代碼。
切換:隔離會帶來什么樣的情景?某分支用來開發新功能,某分支用來修復某個 Bug,某分支用來與別人同步協作,隔離帶來的好處不言而寓,切換就是實現這些隔離的切換,為什么要提切換呢?因為真的很重要,也真的很方便
git?co?目標分支所以,代碼變更,切個分支,養成好習慣
四、分支管理策略
http://blog.jobbole.com/23398/?
http://kb.cnblogs.com/page/132209/
核心是理解下面這個圖:
每個分支都是有意義的(某個里程碑版本、某個 BUG 修復的版本),沒有分支,我們會忽略某些重要的提交
五、一些可以讓你事半功倍的配置(如果你只對 GUI 感興趣,請略過)
1.?簡化 git 命令
git?config?--global?alias.lol?"log?--graph?--pretty=format:'%Cred%h%Creset?-%C(yellow)%d%Creset?%s?%Cgreen(%cr)?%C(bold?blue)<%an>%Creset'?--abbrev-commit"?#git?lol?--all?看效果 git?config?--global??alias.st?status?????????#git?st?-s git?config?--global??alias.ci?commit?????????#git?ci?-am?'commit.' git?config?--global??alias.df?diff???????????#git?df? git?config?--global??alias.co?checkout???????#git?co?master git?config?--global??alias.br?branch?????????#git?br?-av2. 簡化 shell 命令
http://man.linuxde.net/alias
alias?gst="git?st?-s?" alias?gad="git?add?.?" alias?gbr="git?br?-av" alias?glog="git?lol?--all" alias?gup="git?remote?update" #你懂的六、總結
Git 不僅僅是個版本管理工具,理解 Git,掌握 Git,讓 Git 幫助減少問題的產生,提高生產效率。
相關連接:
話說Svn與Git的區別(以后別再問我了):http://www.jianshu.com/p/bfec042349ca
阮一峰:Git分支管理策略:http://blog.jobbole.com/23398/
GIT分支管理是一門藝術:http://kb.cnblogs.com/page/132209/
Alias 命令:http://man.linuxde.net/alias
轉載于:https://my.oschina.net/mays/blog/665416
總結
以上是生活随笔為你收集整理的使用 Git 改进工作方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制作rhel的yum仓库
- 下一篇: 将字符串截取返回