[GIT] 基本概念介紹

【如果覺得文章寫的好的話希望能按一下讚或分享喔】

NewImage

 

最近加入新的團隊,改成使用 GIT 來 Sync 大家的程式

因為之前是用 SVN ,發現概念雖然類似,但還是有一些不同之處,而且有些專有名詞也不太一樣

所以用這篇文章來記錄一下

 


何為 GIT

一個免費且開源的分散式版本控管系統,而且效能超好

有興趣的可以再去看它的 Wiki 頁面

 

GIT 優點

  • 分散式資料庫 (其中一個壞掉沒關係,其他地方還有很多備份, 也可本地備份)
  • 速度快 (官方網站有比較跟 SVN 的速度差異)
  • 使用 Checksum 來保證資料的完整性
  • 其他的優點就大致跟一般的版本管理系統大同小異

名詞

  • Repository:指我們放置 Code 的地方,簡稱 Repo
  • Add:表示將 Code 加到 GIT 的追蹤列表當中
  • Stage:跟 Add 的意思一樣,描述 Code 已經進入追蹤列表當中
  • Pull:指將 Code 從 Repo 上下拉下來 (或可以說 checkout 下來)
  • Commit:將 Code 正式上傳到 Repo 上面,建立一個上傳節點
  • revert:指移除不小心加入的檔案
  • Master:指主線開發的 Code Base,或預設的 Branch
  • Branch:指分線開發的 Code Base (可能測試用,或是還沒完成的 Code)
  • Origin:預設的 Remote Repository, 也代表一個 url 的別名

WorkFlow

work-flow 代表團隊的工作模式

官方網站有介紹三種 work-flow

第一種:Subversion-Style Workflow

NewImage


第一種是最標準的團隊合作流程,統一的 Server,大家的 Code 都會上到此主機


第二種:Integration Manager Workflow

NewImage


第二種則是只有『整合經理』(Integration Manager) 可以上傳到 Blessed Repository,看起來應該就是最終被認可的 Code,而其他的工程師則是從這個 Repository 拿 Code 下來,修改新增完成之後,上傳到自己的 Developer public,而整合經理則是會從這些 Developer public 拿到最新的 Code


第三種:Dictator(統領) and Lieutenants (中尉) workflow

NewImage


第三種 GIT 的 Workflow 適用於大型系統,因為大型系統通常還會有一些子系統,所以這些子系統就會交給『中尉』(Lieutenant) 來管理,而 Developer 則是跟這些中尉負責
 
 

Staging 的概念

請見官網的這張圖
 
NewImage
 
對於 GIT 來說,加入 Staging 的概念,能夠再 Code 正式上傳 (Commit) 前,再做一次 Review
但如果覺得很麻煩的話,只要用 git commit -a 就可以一次把全部的 Code 都上傳
 
NewImage
 

Branch / Merge / Rebase 的概念

Branch 在版本控管系統當中擔任很重要的角色,通常使用 Branch 的時機有:

  • 開發新功能
  • 修正特定 Bug

當我們在 Branch 當中測試無誤之後,就會再把程式 Merge 回主線去,一般情況在 Code 整合時都是用 Merge

不過,在某些特殊情況時,可以考慮改用 Rebase 指令,讓線圖長得更簡單,如下:

  • 小量修改時
  • 預期不太會有 conflict 時
ps. ihover 這篇文章有深入的介紹


GIT 常用指令


GIT command 

git clone path:下載特定位置的資料下來
git status:確認本地資料夾有什麼修改的地方
git add filename:加入要修改的檔案
git add ./-A:將所有有修改的加入
git add -i:用互動的模式來確認要加入的檔案
git commit -m “info”:在本地建立修改記錄,並帶 info 的備註
git push:把修改記錄上傳
git pull:把修改記錄下載回來
git log:列出 repo 記錄


Branch 流程

git branch:建立一個 branch
git checkout ‘branch’:switch to ‘branch’
git add -A
git commit -m “blahblah..”
完成 branch

 


Conflict 處理流程

git pull
發現問題,手動調整程式碼
git status
git add -A
git commit
進入 Merge 模式
:wq 確認修改
Merge branch ‘master’
git push
完成

 

Pull Request (參考影片) 

git checkout master (先回到 master)
git pull (更新 master )
git checkout branchName (切換到 branch)
add > commit change
在 github 上面開 pull request
等待回覆後,會自動 merge 回 master


設定

git config —global alias.co checkout:替 checkout 建立 co 的別名
git config —global color.ui true:設定幫 command 上色
git config —global user.name “xxxx”:設定使用者名稱
git config —global user.email “xxxx”:設定使用者 Email
git config —list :查看 GIT 設定內容

 
其他

git log —author=foxfirejack:搜索特定使用者提交記錄
git branch -m oldName newName:修改 branch 名稱
git stash:保存工作狀態
git stash pop:恢復工作狀態
git show :/xxx:查找跟 xxx 有關的 submit
git diff branch1 branch2:比較兩個 branch 之間的異同


相關軟體

GITHUB

全世界最大的 GIT 社群的 Client 軟體
MacWindows 版本

NewImage

GitX

是一款 GIT history 的檢視器,官網的說明功能如下:
  • Detailed history viewer
  • Nice commit GUI, allowing hunk- and line-wise staging
  • Fast workflow
  • Explore tree of any revision
  • Nice Aqua interface
  • Paste commits to gist.github.com
  • QuickLook integration

開啟的畫面如下,蠻有 MAC UI 的風格,線圖也看的很清楚

NewImage

不過也可以用 gitk –all 指令開啓內建的檢視器

NewImage


相關連結

Related Posts Plugin for WordPress, Blogger...
【如果覺得文章寫的好的話希望能按一下讚或分享喔】

彭其捷

想要做出很棒的產品,所以我寫程式,也研究介面 (UI) 與使用者經驗 (UX),並思考管理的法則。

【Profile】http://about.me/divaka

twitter facebookgooglepluslinkedinbloggertumblrflickryoutubedribbblerssemail


Fatal error: Uncaught Exception: 12: REST API is deprecated for versions v2.1 and higher (12) thrown in /home/content/63/7692663/html/blog/wp-content/plugins/seo-facebook-comments/facebook/base_facebook.php on line 1273