2015年11月28日 星期六

Git - Git 與 Github 版本控制超簡易教學

 

使用 git 和github 整個流程間單來說,是在 GitHub 建立一個「有初始化版本」的 Git 儲存庫(repository, repo),然後透過 git clone 取得遠端儲存庫(pull),之後再用 git 的一系列方法(add, commit ...)建立版本後上傳(push)。


20151128 - 第二版
20150409 - 第一版






一、版本控制與 Git 簡介


版本控制系統是當代軟體開發所不可或缺的工具,而 Git 是其中最先進和熱門、且為開放原始碼的分散式版本控制系統(DVCS)。

Git 是由 Linus Torvalds 所發明,一開始的目的是為了管理 Linux Kernel 原始碼,他於2005/4 開始開發,2005/6 開始管理 Linux Kernel,2005/12 就釋出了 1.0 版。

不同於傳統 Delta 儲存方式,記錄每次檔案變更,開分支需要建立副本。Git 使用 DAG (Directed acyclic graph) 的儲存方式,利用有向無環圖來記錄 metadata 建構出 snapshots,相同內容只會有一份記錄。開分支也只是建立參考。

因其分散式、效能好、本地存取、無痛分支的特性,而普遍適合各種開發流程,近年來受到多數人喜愛。

集中式版本控制系統(Centralized Version Control Systems,CVCSs)


分散式版本控制系統(Distributed Version Control Systems, DVCSs)









二、GitHub 簡介


GitHub 是目前全世界最多人採用的 Git 線上管理平台,他包含了完整的 Git 遠端儲存庫實作,還有完整的議題追蹤機制與報表,更有成千上萬的開源碼專案都在 GitHub 進行 Git 版本控管。





三、安裝git 


ubuntu : apt-get install git

其他作業系統版本參照 : http://git-scm.com/book/zh-tw/v1/開始-安裝Git





四、在網頁端使用Github服務


申請Github帳號 : https://github.com

在Github上新增一個GitHub專案
  • 進入個人首頁 -> 點選綠色New按鈕以建立GitHub專案 -> 設定有初始化版本的 Git儲存庫 [Public, init with README] 





五、配置本機端全局參數


設置 git 提交 code 時你自己的基本資料,必須指定使用者名稱及電子郵件帳號,因為每次Git提交會使用這些資訊,而且提交後不能再被修改:

      git config --global user.name "username"
      git config --global user.email "username@email.com" 
      git config --global push.default matching 
      // 明確指定 push 的方法
      git config --global core.editor "vim"     
      // 將預設編輯器設成vimc
      

通常使用 vim  ~/.gitconfig 或 git config --list 查看設定值。


[用心去感覺] 配置檔案優先順序

  • .git/config : 以容器(repo)為影響範圍,可用 --file 參數操作。
  • ~/.gitconfig : 以使用者為影響範圍,可用 --global 參數操作。
  • /etc/gitconfig :  : 全系統影響,可用 --system 參數操作。





六、Git 一般使用的流程


Git有三種表達檔案的狀態:已提交(committed)已修改(modified)已暫存(staged)




基本Git工作流程大致如下:

  • 讀者修改工作目錄內的檔案。
  • 暫存檔案,將檔案的快照新增到暫存區域。
  • 做提交的動作,這會讓存在暫存區域的檔案快照永久地儲存在Git目錄。


實際 Git 命令如下:

通常會開新的branch,所以下面的範例多了 branch 和 merge的步驟。

1. 第一次初始:在 Github 開儲存庫後 clone到本地端

git clone [clone URL]
//先把儲存庫的code從Github抓下來


[用心去感覺] 或把要版本控制的資料夾設成git儲存庫(repo)

git init 
git add -A
git commit -m "first commit"
git remote add origin https://github.com/your/new/github/repo.git
git push -u origin master



2. 進到儲存庫目錄中生成一個branch

git branch [branch-name] 
//生一個新branch

git checkout [branch-name] 
//切換到此branch上

3. 檔案修改後的整理

git status
//看修改了哪些檔案

git add [加入要追蹤的檔案] 

git rm  [取消追蹤檔案]

git mv[移動追蹤的檔案]

//用add一個檔一個檔自己加,可以Double check自己到底改了哪些檔

git commit
git commit -m balabala
//註解要寫清楚 完成一個小功能就要commit一次

重複步驟3.直到 git status 顯示沒有想要追蹤的檔案
(偷懶可以用git commit -a,呵呵)

4. merge並上傳code

git checkout master

git merge [branch-name] 
//和master merge起來

git push
//接著輸入Github帳號密碼

如果只有一人編輯使用,每次的流程就是跑 2.~ 4.




七、小結


實際使用結果:把過去開發的程式放入git作版本管理,使用起來不錯,版本區隔容易且可以讓自己養成作commit的習慣:)

另外,我主要是看這幾份線上教學文件,寫得非常詳盡實用,大推!

Pro Git
https://git-scm.com/book/zh-tw/v1

Git 版本控制系統
https://ihower.tw/git/

30 天精通 Git 版本控管
https://github.com/dragonkiss81/Learn-Git-in-30-days






References


Pro Git
https://git-scm.com/book/zh-tw/v1

Git 版本控制系統
https://ihower.tw/git/

Git 筆記 - Git初始設定 & Github入門
http://tech.marsw.tw/blog/2013/08/16/git-notes-github

30 天精通 Git 版本控管
https://github.com/dragonkiss81/Learn-Git-in-30-days
https://www.facebook.com/will.fans





技術提供:Blogger.