iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0
Software Development

Emacs 來寫程式系列 第 10

[Emacs-10] 版本控制:Emacs 的 Git 介面 Magit - 1

版本控制

使用 Git 來做版本控制幾乎已經是業界的標準,大部分的使用者不是直接用 Command Line 介面,要不然就使用專門的 Git 圖形介面軟體,很少直接在編輯器裡使用整合的指令,Emacs 在這一點可能會讓人改觀

Emacs 有一個直接跟 Git 整合的套件:Magit,它的特點是

  1. 跟程式編輯整合
  2. 使用方便,不用記得指令的參數,直接用選擇清單方式下指令

先看一下它的介面,等一下再做詳細介紹,可以看見它把大部分的指令都包在介面裡,看起來很複雜,其實使用上很簡單,下面會介紹magit

安裝

安裝 Magit 的方式相當簡單,就是單純設定一個熱鍵 Ctrl-x g 來啟動 magit-status

(use-package magit
  :ensure t
  :bind (("\C-x g" . magit-status))
  )

使用方式

從 Github 或其他網站複製一個專案到本地端

  1. 使用 Meta-x magit-clone
  2. 輸入 clone repository 的 URI 例如 https://github.com/jerryhsieh/Emacs-config.git
  3. Clone to 的目錄
  4. 設定 remote.pushDefaultorigin (y or n)?

重新建立一個資源庫 (repository) 開始

Git 的資源庫是以目錄為單位

  1. 移到要建立的目錄 按 Ctrl-x g
  2. 會先問要開資源庫的目錄 repo
  3. 確認完 create repository in xxx? (y or n)就會初始一個新的 repository init
  4. Magit 的緩衝區,可以下指令,剛開始不熟,可以使用 ? 來叫出指令緩衝區 magit
  5. 使用熟了這些按鍵,就直接按熱鍵,從 Magit-dispatch-popup 回原來 Magit 緩衝區按 q

從 working-directory 到 staging area

Git 最基本的流程如圖 Imgur (從 https://git-scm.com/about/staging-area 擷取)

  1. 移動游標到 Untracked files 那一行 working,按 s 所有檔案都會進入 staged changes stage
  2. 要反悔的話,按 u
  3. 也可以 stage 單一檔案,移動游標到那一個檔案,按 s,或者將單一檔案回到 working-directory 按 u

加入 .gitignore

有些檔案我們要排除他們在資源庫裡,例如一些 tag 檔,一些外來的函式庫 (node_modules)等等

  1. 移動游標到那個檔案,按 i 啟動 ignore
  2. 填入要排除的檔案,可以用正規表示法 (regular expression),enter 後會自動加入 .gitignore 檔案,並且將相關檔案從 untracked files 移掉 ignore

修改 stage 的檔案

當修改了 staged 的檔案時,這時按 g refresh (重新顯示) magit 緩衝區,會出現 Unstaged changes 也就是 modifed 檔案 modified

這時如果增加新的檔案,就會同時有 Untracked filesUnstaged changes Imgur

從 staging area commit 到 repository

如果專案到了一定階段,可以做 Commit,可以連續按兩次 c,剛開始不熟,先按一次 c,會出來commit

就像在 command line 下 git commit 一樣,可以加一些參數,例如 -a 是 stage all modified and deleted files,我們用 Ctrl-c Ctrl-c 可以保留為預設,Action 是指下一個指令,再按一次 c commit

出現兩個視窗,上面 magit-diff 顯示這次 commit 的不同的地方,下方可以打入 commit message,太長的話會出現警告顏色 message

輸入完畢,按 Ctrl-c Ctrl-c 儲存,儲存完畢 magit緩衝區會出現 Head head

要看 commit 的歷史 (log),可以按兩次 llog

Stash

Stash 是一個特殊的狀態,通常使用在有些改變我們先不確定要做 commit,或許想先看看哪一種改變比較好,或許不確定改變是否可行,這時候可以先放在 stash 裡,到時在決定要不要用,或者哪一個 stash 比較好

Magit 裡,使用 z 來做 stashing,按兩次 z 就可以輸入一個簡單的訊息方便以後來看Imgur

當有多個stash 時,移動游標,按 spaceenter 可以看改變的狀況stash

你如果決定要使用這個 stash,移到那一個 stash,按 zp (pop)pop
如果確定不要了,可以按 zk (drop) 掉

我們大略介紹了建立 repository, working directory, stage 跟 stash 的操作,下一篇再來看 branch 以及 remote 的使用

相關影片,請看 Yes

相關資料,請看我的部落格

相關程式,請看 Github,請下載 init.el~/.emacs.d/ 下,啟動 Emacs 就會自動安裝


上一篇
[Emacs-9] 程式語法檢查套件 : Flycheck
下一篇
[Emacs-11] 版本控制:Emacs Magit 的分支管理
系列文
Emacs 來寫程式30

尚未有邦友留言

立即登入留言