從VSS到SVN再到Git 記Git的基本操作

Source code control 一直是軟件開發(fā)過程中重要的環(huán)節(jié),從最初的純文件備份关摇,到使用工具進(jìn)行管理荒叶。Source code control 工具的作用也不僅僅只是單純的對同一個版本進(jìn)行管理了。從目前主流的source code control工具當(dāng)中不難發(fā)現(xiàn)里面的Branch, tag等功能的應(yīng)用場景越來越多输虱,特別是現(xiàn)在多數(shù)企業(yè)使用的敏捷編程些楣,結(jié)合branch和tag等功能真的能夠很好的做到多版本開發(fā),快速迭代宪睹。

思考: 沒有source code control我們?nèi)绾慰焖俚幕谝环荽a同時進(jìn)行多個功能的并行開發(fā)愁茁。

回過頭來說下本人在行業(yè)當(dāng)中所用到的幾款source code control工具。

VSS

VSS(Visual Source Salf)亭病,是一款微軟提供的代碼管理工具鹅很,作為Visual Studio的一員,在早期的開發(fā)過程當(dāng)中確實能夠確保代碼不被開發(fā)人員錯誤的修改罪帖,也解決了異地開發(fā)協(xié)作的代碼共享管理的難點促煮。但是依舊有一些不足,比如:

  • 文件基本以獨占的形勢進(jìn)行鎖定整袁。如果A在修改的時候B沒有辦法進(jìn)行修改污茵。
  • VSS只支持Windows版本,支持的開發(fā)工具僅支持微軟系葬项。
  • 基于文件存儲,服務(wù)器必須共享文件夾迹蛤。安全性值得考慮民珍。以前一般用于內(nèi)網(wǎng)開發(fā)環(huán)境。
  • 收費

SVN

SVN(Subversion)盗飒,一個開源的source code control system嚷量。除開最基本的如VSS提供的代碼管理功能外,最大的亮點是提供了分支逆趣,且提交內(nèi)容的級別基于代碼行了蝶溶。也就是說,不用再有獨占文件開發(fā)的問題了。比如抖所,一個實現(xiàn)接口的代碼文件可以由多個開發(fā)人員同時修改梨州。誰先做完誰可以先進(jìn)行提交,不會等到必須所有的人做完后再進(jìn)行合并田轧。對于不能使用VSS的工程師來說暴匠,SVN的出現(xiàn)完全是一個福音,直接從CVS跳到了這么強大的工具上傻粘。
總結(jié)一下每窖,SVN的優(yōu)劣如下:

  • 優(yōu)勢
    • 代碼一致性高。
    • 支持提交事物性操作弦悉。
    • Diff 功能窒典。
    • Branch,Tag的引用,方便版本管理稽莉。
    • 輕松上手瀑志。
  • 劣勢
    • 必須是聯(lián)網(wǎng)狀態(tài)下才可以進(jìn)行一些數(shù)據(jù)的讀取。
    • 不是分布式的代碼庫肩祥。
    • SVN服務(wù)器崩潰的災(zāi)難是巨大的后室。

Git

隨著開源運動的流行(Liunx開發(fā)人員的功勞),Git也就這么流行起來的混狠。說是在隨著開源運動的流行而流行起Git的呢岸霹?這歸功于Git的分布式這一特性。試想将饺,如果全世界所有的Liunx愛好者都在幾臺機器上進(jìn)行開發(fā)和提交贡避,這酸爽不敢想象。抑或是主服務(wù)器崩潰了予弧,那么其他的開發(fā)人員也只有淚奔刮吧。
Git的牛逼之處在于以下:

  • 每一次Clone就是從服務(wù)器上pull到了所有的內(nèi)容,包括版本信息掖蛤。
  • 在本地可以根據(jù)不同的需要杀捻,本地新建自己的分支。
  • 分支之間的任意切換蚓庭。
  • 單機上就可以進(jìn)行分支合并致讥。
  • 牛人+插件加持。 Git flow, 按Vincent Driessen 分支模型提供的一個插件.
git-model@2x.png

A successful Git branching model

如何使用Git

  1. 安裝

  2. $ Brew install git 
    
  3. 創(chuàng)建倉庫

  4. $ git init
    
  5. 文件操作

    有了倉庫后就可以對文件進(jìn)行 add , commit, push 和pull等操作了器赞。

Tables Are
git add 添加至?xí)捍鎱^(qū)
git add–interactive 交互式添加
git apply 應(yīng)用補丁
git am 應(yīng)用郵件格式補丁
git annotate同義詞垢袱,等同于 git blame
git archive 文件歸檔打包
git bisect 二分查找
git blame 文件逐行追溯
git branch 分支管理
git cat-file 版本庫對象研究工具
git checkout 檢出到工作區(qū)、切換或創(chuàng)建分支
git cherry-pick 提交揀選
git citool 圖形化提交港柜,相當(dāng)于 git gui 命令
git clean 清除工作區(qū)未跟蹤文件
git clone 克隆版本庫
git commit 提交
git config 查詢和修改配置
git describe 通過里程碑直觀地顯示提交ID
git diff 差異比較
git difftool 調(diào)用圖形化差異比較工具
git fetch 獲取遠(yuǎn)程版本庫的提交
git format-patch 創(chuàng)建郵件格式的補丁文件请契。參見 git am 命令
git grep 文件內(nèi)容搜索定位工具
git gui 基于Tcl/Tk的圖形化工具,側(cè)重提交等操作
git help 幫助
git init 版本庫初始化
git init-db* 同義詞,等同于 git init
git log 顯示提交日志
git merge 分支合并
git mergetool 圖形化沖突解決
git mv 重命名
git pull 拉回遠(yuǎn)程版本庫的提交
git push 推送至遠(yuǎn)程版本庫
git rebase 分支變基
git rebase–interactive 交互式分支變基
git reflog 分支等引用變更記錄管理
git remote 遠(yuǎn)程版本庫管理
git repo-config* 同義詞爽锥,等同于 git config
git reset 重置改變分支“游標(biāo)”指向
git rev-parse 將各種引用表示法轉(zhuǎn)換為哈希值等
git revert 反轉(zhuǎn)提交
git rm 刪除文件
git show 顯示各種類型的對象
git stage* 同義詞涌韩,等同于 git add
git stash 保存和恢復(fù)進(jìn)度
git status 顯示工作區(qū)文件狀態(tài)
git tag 里程碑管理

.
.

Best practice

建議使用github進(jìn)行上手實驗。使用郵箱注冊一次Git hub后即可在Github上創(chuàng)建自己的Repository.


2.png

創(chuàng)建完成后救恨,我們會得到一個Repository的地址贸辈。有了這個地址我們就可以進(jìn)行Git的練習(xí)了。

3.png
  • 使用 git clone 將遠(yuǎn)程倉庫clone到本地肠槽。

     git clone 
    
5.png
  • 添加一些文件
  echo "Hello Scott" -> "Hello"   //寫了一個文件到Hello
  git add Hello // 將Hello文件添加到暫存區(qū)擎淤。(Index)
  git commit -m "this is my first file" // 提交到本地倉庫
  git push  //推送本地倉庫到遠(yuǎn)程倉庫
6.png

以上,文件就被推送到了遠(yuǎn)程倉庫秸仙。其他工程師如果執(zhí)行Pull操作的話即可把變動的文件拉到本地嘴拢。

7.png
  • 如果有其他工程師修改了文件,需要遠(yuǎn)程獲取下寂纪。
    git pull //拉取遠(yuǎn)端文件
    git log //可以查看變更歷史
A5B85BFD-764E-468F-81C4-0B727BA70428.png
  • 沖突的解決
    沖突往往是因為版本不一致而產(chǎn)生席吴。如工程師A修改了Hello文件并提交到遠(yuǎn)端倉庫,而B在本地修改了Hello捞蛋,也想提交孝冒。由于A和B的Hello文件并不一致,所以沖突產(chǎn)生了拟杉。
4EB9EB75-2FF9-4363-AD78-9E13D1415EA8.png

只需要git pull一次即可庄涡。 (注:git pull 會自動merge,但是通常情況下自動merge效果不會太好搬设。比如A和B 都在修改function A (){} )
沖突長這模樣。

10.png

一般手動解決沖突后拿穴,重新添加泣洞,提交,push即可默色。


11.png

如上描述球凰,手動合并沖突比較麻煩。建議使用工具進(jìn)行g(shù)it 的操作腿宰,現(xiàn)在一般的工具都提供了分支管理弟蚀,合并等功能。
推薦 SourceTree

分支的管理

在很多時候會遇到同時需要開發(fā)多個功能酗失,開發(fā)任務(wù)將會交給多個工程師進(jìn)行開發(fā),這個時候在Git上的實踐為-->創(chuàng)建多個分支昧绣。 N個工程師從Master或Dev分支進(jìn)行分支創(chuàng)建规肴。

git checkout -b NewFeature   // 分支建好后,會直接切換到該分支。
git push --set-upstream origin NewFeature //與遠(yuǎn)程分支關(guān)聯(lián)

完成開發(fā)后拖刃,需要合并到Master 或Dev 分支删壮。

  git merge origin/NewFeature  // 將遠(yuǎn)程分支NewFeature與當(dāng)前分支合并。
12.png

寫在最后

以上從source code control擴散到Git的使用兑牡,僅僅只是拋磚引玉央碟。歡迎大家多多指教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末均函,一起剝皮案震驚了整個濱河市亿虽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苞也,老刑警劉巖洛勉,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異如迟,居然都是意外死亡收毫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門殷勘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來此再,“玉大人,你說我怎么就攤上這事玲销∈淠矗” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵痒玩,是天一觀的道長淳附。 經(jīng)常有香客問我,道長蠢古,這世上最難降的妖魔是什么奴曙? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮草讶,結(jié)果婚禮上洽糟,老公的妹妹穿的比我還像新娘。我一直安慰自己堕战,他們只是感情好坤溃,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘱丢,像睡著了一般薪介。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上越驻,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天汁政,我揣著相機與錄音道偷,去河邊找鬼。 笑死记劈,一個胖子當(dāng)著我的面吹牛勺鸦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播目木,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼换途,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刽射?” 一聲冷哼從身側(cè)響起军拟,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柄冲,沒想到半個月后吻谋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡现横,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年漓拾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒祠。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡骇两,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姜盈,到底是詐尸還是另有隱情低千,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布馏颂,位于F島的核電站示血,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏救拉。R本人自食惡果不足惜难审,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亿絮。 院中可真熱鬧告喊,春花似錦间学、人聲如沸添吗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至葡缰,卻和暖如春样傍,著一層夾襖步出監(jiān)牢的瞬間角塑,已是汗流浹背五慈。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工纳寂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留实苞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓烈疚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聪轿。 傳聞我的和親對象是個殘疾皇子爷肝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)陆错,斷路器灯抛,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,700評論 1 17
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git音瓷,從https:/...
    落魂灬閱讀 12,663評論 4 54
  • 【人非草木】 崎嶇的山路对嚼,漆黑的夜晚。 “不要殺我绳慎!爹纵竖!娘!” 少年無助的叫喊聲杏愤,回蕩在山洞里靡砌。 外面尸體遍地,馬...
    踏歌涉川閱讀 702評論 0 0
  • 感謝神賜給我一個屬靈的好伙伴(遲姐)珊楼,使我感到不孤單通殃,我非常開心也很感恩。今天上午想去看春艷可天又下雨厕宗,遲姐說她也...
    周淑峰閱讀 251評論 0 0