Source code control 一直是軟件開發過程當中重要的環節,從最初的純文件備份,到使用工具進行管理。Source code control 工具的做用也不只僅只是單純的對同一個版本進行管理了。從目前主流的source code control工具當中不難發現裏面的Branch, tag等功能的應用場景愈來愈多,特別是如今多數企業使用的敏捷編程,結合branch和tag等功能真的可以很好的作到多版本開發,快速迭代。git
思考: 沒有source code control咱們如何快速的基於一份代碼同時進行多個功能的並行開發。github
回過頭來講下本人在行業當中所用到的幾款source code control工具。編程
VSS(Visual Source Salf),是一款微軟提供的代碼管理工具,做爲Visual Studio的一員,在早期的開發過程中確實可以確保代碼不被開發人員錯誤的修改,也解決了異地開發協做的代碼共享管理的難點。可是依舊有一些不足,好比:安全
SVN(Subversion),一個開源的source code control system。除開最基本的如VSS提供的代碼管理功能外,最大的亮點是提供了分支,且提交內容的級別基於代碼行了。也就是說,不用再有獨佔文件開發的問題了。好比,一個實現接口的代碼文件能夠由多個開發人員同時修改。誰先作完誰能夠先進行提交,不會等到必須全部的人作完後再進行合併。對於不能使用VSS的工程師來講,SVN的出現徹底是一個福音,直接從CVS跳到了這麼強大的工具上。
總結一下,SVN的優劣以下:bash
隨着開源運動的流行(Liunx開發人員的功勞),Git也就這麼流行起來的。說是在隨着開源運動的流行而流行起Git的呢?這歸功於Git的分佈式這一特性。試想,若是全世界全部的Liunx愛好者都在幾臺機器上進行開發和提交,這酸爽不敢想象。抑或是主服務器崩潰了,那麼其餘的開發人員也只有淚奔。
Git的牛逼之處在於如下:服務器
A successful Git branching modelapp
$ Brew install git分佈式
建立倉庫工具
文件操做post
有了倉庫後就能夠對文件進行 add , commit, push 和pull等操做了。
Tables | Are |
---|---|
git add | 添加至暫存區 |
git add–interactive | 交互式添加 |
git apply | 應用補丁 |
git am | 應用郵件格式補丁 |
git annotate同義詞,等同於 git blame | |
git archive | 文件歸檔打包 |
git bisect | 二分查找 |
git blame | 文件逐行追溯 |
git branch | 分支管理 |
git cat-file | 版本庫對象研究工具 |
git checkout | 檢出到工做區、切換或建立分支 |
git cherry-pick | 提交揀選 |
git citool | 圖形化提交,至關於 git gui 命令 |
git clean | 清除工做區未跟蹤文件 |
git clone | 克隆版本庫 |
git commit | 提交 |
git config | 查詢和修改配置 |
git describe | 經過里程碑直觀地顯示提交ID |
git diff | 差別比較 |
git difftool | 調用圖形化差別比較工具 |
git fetch | 獲取遠程版本庫的提交 |
git format-patch | 建立郵件格式的補丁文件。參見 git am 命令 |
git grep | 文件內容搜索定位工具 |
git gui | 基於Tcl/Tk的圖形化工具,側重提交等操做 |
git help | 幫助 |
git init | 版本庫初始化 |
git init-db* | 同義詞,等同於 git init |
git log | 顯示提交日誌 |
git merge | 分支合併 |
git mergetool | 圖形化衝突解決 |
git mv | 重命名 |
git pull | 拉回遠程版本庫的提交 |
git push | 推送至遠程版本庫 |
git rebase | 分支變基 |
git rebase–interactive | 交互式分支變基 |
git reflog | 分支等引用變動記錄管理 |
git remote | 遠程版本庫管理 |
git repo-config* | 同義詞,等同於 git config |
git reset | 重置改變分支「遊標」指向 |
git rev-parse | 將各類引用表示法轉換爲哈希值等 |
git revert | 反轉提交 |
git rm | 刪除文件 |
git show | 顯示各類類型的對象 |
git stage* | 同義詞,等同於 git add |
git stash | 保存和恢復進度 |
git status | 顯示工做區文件狀態 |
git tag | 里程碑管理 |
.
.
建議使用github進行上手實驗。使用郵箱註冊一次Git hub後便可在Github上建立本身的Repository.
建立完成後,咱們會獲得一個Repository的地址。有了這個地址咱們就能夠進行Git的練習了。
使用 git clone 將遠程倉庫clone到本地。
git clone
echo "Hello Scott" -> "Hello" //寫了一個文件到Hello git add Hello // 將Hello文件添加到暫存區。(Index) git commit -m "this is my first file" // 提交到本地倉庫 git push //推送本地倉庫到遠程倉庫
以上,文件就被推送到了遠程倉庫。其餘工程師若是執行Pull操做的話便可把變更的文件拉到本地。
git pull //拉取遠端文件 git log //能夠查看變動歷史
只須要git pull一次便可。 (注:git pull 會自動merge,可是一般狀況下自動merge效果不會太好。好比A和B 都在修改function A (){} )
衝突長這模樣。
通常手動解決衝突後,從新添加,提交,push便可。
如上描述,手動合併衝突比較麻煩。建議使用工具進行git 的操做,如今通常的工具都提供了分支管理,合併等功能。
推薦 SourceTree
在不少時候會遇到同時須要開發多個功能,開發任務將會交給多個工程師進行開發,這個時候在Git上的實踐爲-->建立多個分支。 N個工程師從Master或Dev分支進行分支建立。
git checkout -b NewFeature // 分支建好後,會直接切換到該分支。 git push --set-upstream origin NewFeature //與遠程分支關聯
完成開發後,須要合併到Master 或Dev 分支。
git merge origin/NewFeature // 將遠程分支NewFeature與當前分支合併。
寫在最後
以上從source code control擴散到Git的使用,僅僅只是拋磚引玉。歡迎你們多多指教。