最近公司要把版控系統換成git,就花了一點時間來看一下
雖然以前有用過一小段時間,不過可以說是啥都記不得了XD
這篇就以我最近的學習內容來說說吧
1. GitHub
有些人會把git和gitHub兩個東西搞混,其實這兩個... 基本上是不同的兩個東西
git就是所謂的版本控制系統,github比較像是 "使用git作為版本控制系統的server"
所以如果你懶得自己嫁什麼server,直接用github也是可以
然後gitHub有提供一些其他功能,比如說他可以直接用web去瀏覽很方便,可以跟一些CI的系統整合(像是jenkins),提供一個平台可以讓你的web程式在上面跑,諸如此類的
就是個挺方便的東西,有興趣可以去用看看
2. git 基本使用
基本上git只要學會基本操作,就可以完成大部分的需求了
不過我個人覺得對於只用過SVN這種集中式的板控的人,觀念上會有點不一樣,因為我就是=ˇ=
首先git是 "分散式" 的版本控制系統,什麼是分散式呢?就是 "每個人的local端都是一個版控"
當你從遠端clone一個repository下來之後,你的local端就等於是建立一個版控系統了
你可以在local端做任何修改,比如說開跟砍branch、新增或刪除commit等等,只要你沒有push到遠端,對於其他人來說就沒有任何影響
我覺得這樣最大的好處是你可以在local端整理commit,修改成你個人覺得最好的情況之後再push
這跟集中式版控是不一樣的,集中式版控如果要commit或做任何事都會直接影響到遠端的server上,其他人也必需去做應對的動作
這樣的設計方式跟流程也讓開發變得比較容易,如果有興趣可以去搜尋一下git flow,基本上就是用這個概念去延伸出很多開發流程
git有幾個基本的操作指令,還有一些基本的概念,如果大概知道的話,我個人覺得就可以應付大部分的工作了
除非有什麼意外之類的... XD
一些環境設定什麼的就先不談了,理論上就是下載git,建個帳號,在local端建立使用者資訊這樣,就可以開始使用了
1. clone
clone就是從遠端拉一份新的repository下來,這是最剛開始要做的事情
他會從遠端複製一份rerpository到local端
2. fetch
當你想要知道遠端的repository有什麼變動時,可以用fetch這個指令
他會把遠端新增加的commit拉到local端
3. merge
就是合併的意思,用來合併兩個branch
4. pull
這個指令簡單來說就是fetch + merge,他會把遠端新增的commit拉下來,然後跟你local端的commit merge
當然,這過程中如果有發生conflict的話 (就是你的commit跟遠端新增的commit有衝突,git不曉得該怎麼合併),就需要user自己來解決了
5. checkout
可以把他想成移動的意思,要移動到哪個commit或branch都可以用這個指令(雖然現在有switch這個指令可以切換分支了)
checkout -b 也可以建立新的branch,或是加上--track參數,建立一個branch去追蹤跟同步遠端的branch
6. commit
對目前的修改增加commit,這個沒什麼好解釋的吧XD
順帶一提,每個commit都有一個sha1值,用來分辨各個commit
7. push
把local端的commit推到遠端,表示local端的工作完成了,push之後別人也才看的到你做的內容
比較基本的大概就這些吧
其實如果是用GUI的話,事情會變得簡單很多
不過建議還是先從command用用看一些基本的指令,練習一下,比較能夠理解