Source code control 一直是軟件開(kāi)發(fā)過(guò)程中重要的環(huán)節(jié),從最初的純文件備份,到使用工具進(jìn)行管理。Source code control 工具的作用也不僅僅只是單純的對(duì)同一個(gè)版本進(jìn)行管理了。從目前主流的source code control工具當(dāng)中不難發(fā)現(xiàn)里面的Branch, tag等功能的應(yīng)用場(chǎng)景越來(lái)越多,特別是現(xiàn)在多數(shù)企業(yè)使用的敏捷編程,結(jié)合branch和tag等功能真的能夠很好的做到多版本開(kāi)發(fā),快速迭代。
為寧陽(yáng)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及寧陽(yáng)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站制作、寧陽(yáng)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!思考: 沒(méi)有source code control我們?nèi)绾慰焖俚幕谝环荽a同時(shí)進(jìn)行多個(gè)功能的并行開(kāi)發(fā)。
回過(guò)頭來(lái)說(shuō)下本人在行業(yè)當(dāng)中所用到的幾款source code control工具。
VSS(Visual Source Salf),是一款微軟提供的代碼管理工具,作為Visual Studio的一員,在早期的開(kāi)發(fā)過(guò)程當(dāng)中確實(shí)能夠確保代碼不被開(kāi)發(fā)人員錯(cuò)誤的修改,也解決了異地開(kāi)發(fā)協(xié)作的代碼共享管理的難點(diǎn)。但是依舊有一些不足,比如:
文件基本以獨(dú)占的形勢(shì)進(jìn)行鎖定。如果A在修改的時(shí)候B沒(méi)有辦法進(jìn)行修改。
VSS只支持Windows版本,支持的開(kāi)發(fā)工具僅支持微軟系。
基于文件存儲(chǔ),服務(wù)器必須共享文件夾。安全性值得考慮。以前一般用于內(nèi)網(wǎng)開(kāi)發(fā)環(huán)境。
收費(fèi)
SVN(Subversion),一個(gè)開(kāi)源的source code control system。除開(kāi)最基本的如VSS提供的代碼管理功能外,大的亮點(diǎn)是提供了分支,且提交內(nèi)容的級(jí)別基于代碼行了。也就是說(shuō),不用再有獨(dú)占文件開(kāi)發(fā)的問(wèn)題了。比如,一個(gè)實(shí)現(xiàn)接口的代碼文件可以由多個(gè)開(kāi)發(fā)人員同時(shí)修改。誰(shuí)先做完誰(shuí)可以先進(jìn)行提交,不會(huì)等到必須所有的人做完后再進(jìn)行合并。對(duì)于不能使用VSS的工程師來(lái)說(shuō),SVN的出現(xiàn)完全是一個(gè)福音,直接從CVS跳到了這么強(qiáng)大的工具上。
總結(jié)一下,SVN的優(yōu)劣如下:
優(yōu)勢(shì):
代碼一致性高。
支持提交事物性操作。
Diff 功能。
Branch,Tag的引用,方便版本管理。
輕松上手。
劣勢(shì)
必須是聯(lián)網(wǎng)狀態(tài)下才可以進(jìn)行一些數(shù)據(jù)的讀取。
不是分布式的代碼庫(kù)。
SVN服務(wù)器崩潰的災(zāi)難是巨大的。
隨著開(kāi)源運(yùn)動(dòng)的流行(Liunx開(kāi)發(fā)人員的功勞),Git也就這么流行起來(lái)的。說(shuō)是在隨著開(kāi)源運(yùn)動(dòng)的流行而流行起Git的呢?這歸功于Git的分布式這一特性。試想,如果全世界所有的Liunx愛(ài)好者都在幾臺(tái)機(jī)器上進(jìn)行開(kāi)發(fā)和提交,這酸爽不敢想象。抑或是主服務(wù)器崩潰了,那么其他的開(kāi)發(fā)人員也只有淚奔。
Git的牛逼之處在于以下:
每一次Clone就是從服務(wù)器上pull到了所有的內(nèi)容,包括版本信息。
在本地可以根據(jù)不同的需要,本地新建自己的分支。
分支之間的任意切換。
單機(jī)上就可以進(jìn)行分支合并。
牛人+插件加持。 Git flow, 按Vincent Driessen 分支模型提供的一個(gè)插件.
git-model@2x.png
A successful Git branching model
安裝
$ Brew install git
創(chuàng)建倉(cāng)庫(kù)
$ git init
文件操作
有了倉(cāng)庫(kù)后就可以對(duì)文件進(jìn)行 add , commit, push 和pull等操作了。
Tables | Are |
---|---|
git add | 添加至?xí)捍鎱^(qū) |
git add–interactive | 交互式添加 |
git apply | 應(yīng)用補(bǔ)丁 |
git am | 應(yīng)用郵件格式補(bǔ)丁 |
git annotate同義詞,等同于 git blame | |
git archive | 文件歸檔打包 |
git bisect | 二分查找 |
git blame | 文件逐行追溯 |
git branch | 分支管理 |
git cat-file | 版本庫(kù)對(duì)象研究工具 |
git checkout | 檢出到工作區(qū)、切換或創(chuàng)建分支 |
git cherry-pick | 提交揀選 |
git citool | 圖形化提交,相當(dāng)于 git gui 命令 |
git clean | 清除工作區(qū)未跟蹤文件 |
git clone | 克隆版本庫(kù) |
git commit | 提交 |
git config | 查詢和修改配置 |
git describe | 通過(guò)里程碑直觀地顯示提交ID |
git diff | 差異比較 |
git difftool | 調(diào)用圖形化差異比較工具 |
git fetch | 獲取遠(yuǎn)程版本庫(kù)的提交 |
git format-patch | 創(chuàng)建郵件格式的補(bǔ)丁文件。參見(jiàn) git am 命令 |
git grep | 文件內(nèi)容搜索定位工具 |
git gui | 基于Tcl/Tk的圖形化工具,側(cè)重提交等操作 |
git help | 幫助 |
git init | 版本庫(kù)初始化 |
git init-db* | 同義詞,等同于 git init |
git log | 顯示提交日志 |
git merge | 分支合并 |
git mergetool | 圖形化沖突解決 |
git mv | 重命名 |
git pull | 拉回遠(yuǎn)程版本庫(kù)的提交 |
git push | 推送至遠(yuǎn)程版本庫(kù) |
git rebase | 分支變基 |
git rebase–interactive | 交互式分支變基 |
git reflog | 分支等引用變更記錄管理 |
git remote | 遠(yuǎn)程版本庫(kù)管理 |
git repo-config* | 同義詞,等同于 git config |
git reset | 重置改變分支“游標(biāo)”指向 |
git rev-parse | 將各種引用表示法轉(zhuǎn)換為哈希值等 |
git revert | 反轉(zhuǎn)提交 |
git rm | 刪除文件 |
git show | 顯示各種類型的對(duì)象 |
git stage* | 同義詞,等同于 git add |
git stash | 保存和恢復(fù)進(jìn)度 |
git status | 顯示工作區(qū)文件狀態(tài) |
git tag | 里程碑管理 |
.
.
建議使用github進(jìn)行上手實(shí)驗(yàn)。使用郵箱注冊(cè)一次Git hub后即可在Github上創(chuàng)建自己的Repository.
2.png
創(chuàng)建完成后,我們會(huì)得到一個(gè)Repository的地址。有了這個(gè)地址我們就可以進(jìn)行Git的練習(xí)了。
3.png
使用 git clone 將遠(yuǎn)程倉(cāng)庫(kù)clone到本地。
git clone
5.png
添加一些文件
echo "Hello Scott" -> "Hello" //寫了一個(gè)文件到Hello git add Hello // 將Hello文件添加到暫存區(qū)。(Index) git commit -m "this is my first file" // 提交到本地倉(cāng)庫(kù) git push //推送本地倉(cāng)庫(kù)到遠(yuǎn)程倉(cāng)庫(kù)
6.png
以上,文件就被推送到了遠(yuǎn)程倉(cāng)庫(kù)。其他工程師如果執(zhí)行Pull操作的話即可把變動(dòng)的文件拉到本地。
7.png
如果有其他工程師修改了文件,需要遠(yuǎn)程獲取下。
git pull //拉取遠(yuǎn)端文件 git log //可以查看變更歷史
A5B85BFD-764E-468F-81C4-0B727BA70428.png
沖突的解決
沖突往往是因?yàn)榘姹静灰恢露a(chǎn)生。如工程師A修改了Hello文件并提交到遠(yuǎn)端倉(cāng)庫(kù),而B在本地修改了Hello,也想提交。由于A和B的Hello文件并不一致,所以沖突產(chǎn)生了。
4EB9EB75-2FF9-4363-AD78-9E13D1415EA8.png
只需要git pull一次即可。 (注:git pull 會(huì)自動(dòng)merge,但是通常情況下自動(dòng)merge效果不會(huì)太好。比如A和B 都在修改function A (){} )
沖突長(zhǎng)這模樣。
10.png
一般手動(dòng)解決沖突后,重新添加,提交,push即可。
11.png
如上描述,手動(dòng)合并沖突比較麻煩。建議使用工具進(jìn)行g(shù)it 的操作,現(xiàn)在一般的工具都提供了分支管理,合并等功能。
推薦 SourceTree
在很多時(shí)候會(huì)遇到同時(shí)需要開(kāi)發(fā)多個(gè)功能,開(kāi)發(fā)任務(wù)將會(huì)交給多個(gè)工程師進(jìn)行開(kāi)發(fā),這個(gè)時(shí)候在Git上的實(shí)踐為-->創(chuàng)建多個(gè)分支。 N個(gè)工程師從Master或Dev分支進(jìn)行分支創(chuàng)建。
git checkout -b NewFeature // 分支建好后,會(huì)直接切換到該分支。git push --set-upstream origin NewFeature //與遠(yuǎn)程分支關(guān)聯(lián)
完成開(kāi)發(fā)后,需要合并到Master 或Dev 分支。
git merge origin/NewFeature // 將遠(yuǎn)程分支NewFeature與當(dāng)前分支合并。
12.png
寫在最后
以上從source code control擴(kuò)散到Git的使用,僅僅只是拋磚引玉。歡迎大家多多指教。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。