時光機
的崛起
版本控制軟體--git
版本控制軟體
為何版本控制
方便管理軟體版本 (廢話)
- 清楚知道有那些改變、由誰改變
- 功能開發、除錯
- 常見的版本控制軟體
- git
- SVN
- 其他
由 Git bash 切入
- 下載點
- 簡單的操作功能 (後面介紹)
Command Line Interface
命令行介面
- 長這樣
- 只有文字操作
- git bash 也是一種文字介面
CLI vs. GUI
文字 vs. 圖形化
- 圖形化直覺、易懂
- 文字命令精準、好控制
- 各有好壞,學程式不免需要用 CLI
GIT BASH
一種 CLI
- 圖形化介面能做的,CLI 都能做
- 簡單命令格式
g++ c560.cpp -o c560.out
命令本體
是一支程式
option 是看需求
加入的參數
通常以 - 和 -- 開頭
會有數個
參數
常用的指令
- 參考:鳥哥 Linux 檔案及目錄管理
- 目錄
- / 是根目錄
- . 是當前目錄
- .. 是上一層目錄
- 相關操作
- pwd:所在目錄
- ls:顯示目錄的檔案
- cd:在目錄之間移動
常用的指令
Git 指令操作
- 網路上教學資料一堆
Repository
- 簡稱 repo
- 每個版本控制的單位
- 可以想像是一個專案
GIT 核心概念
檔案的狀態
Source: Git 與 Github 版本控制超簡易教學
相關指令
- git init:初始化 git repo
- git status:查看 stage 的狀況
- git add <file>:stage 檔案
-
git commit:存取快照,建立新結點
- 建立 Commit 通常是總結修改的內容,以利日後開發
- 預設編輯器
基本 Vim 操作
-
指令模式:輸入指令
- :w 存檔
- :q 退出
- :wq 存檔 + 退出
- :q! 不存檔強制退出
-
插入模式
- 指令模式按 i 之後可以進入插入模式,編輯檔案內容
- <ESC> 跳出插入模式,回指令模式
git 分支系統
- git 可以有很多分支
- 隨意合併、各自修改
- 當前分支會用 HEAD 指向
- 預設分支名為 master
- 因此預設 HEAD 會指向 master 所在 commit
分支系統常見指令
- git branch:分支狀況
- git branch <分支名>:開新的分支
- git checkout <分支名>:切換分支
- git merge <分支名>:合併分支
- git merge --no-ff <分支名>
- 不要 fast forward
- 分支合併編輯衝突
為什麼檔案管理要那麼麻煩?
當有十幾人跟你一起寫同一份 code 就知道了
一些好用的指令
- 取縮寫 alias
- 比如每次打 checkout 太長,想改成 co
- git config --global alias.co checkout
-
.gitignore 和 .gitkeep 檔案
-
git add -i:互動式
-
git checkout -- <file>:SL大法,回到上次commit的狀態
-
git log:查看過去 commit 紀錄
Github 教學
多人玩 git 才好玩
使用 github 前的設定
// 在 github 上的 username
git config --global user.name "username"
// 在 github 上的 email
git config --global user.email "username@email.com"
// 設定預設編輯器
git config --global core.editor "vim"
- 其他可以設定的項目:查文件
遠端概念
- 遠端習慣名稱叫 origin
- 和遠端的設定多在 git remote 指令
-
git clone <repo 位置>:遠端的 repo 下載到本地端
- 遠端的 repo 自動就是 origin 不用設定
- git push <遠端名> <分支名>:把本地的修改丟到遠端
- git pull <遠端名>:把遠端的修改拉到本地
github 上靜態網頁顯示
- repo 名稱為「<username>.github.io」
- master 分支的網頁
- 顯示在網址「https://<username>.github.io」
- 其他 repo
- 網頁要在名為 gh-pages 分支上
- 網址為「https://<username>.github.io/<repo名>」
權限
- git 完全沒有權限觀念
- github 為了避免天下大亂,採用 fork 和 pull request 模式
- fork:把別人專案拉過來自己改
- pull request:請求對方 pull 自己修改的內容
- 參考:了解 GitHub 的 fork 與 pull request 版控流程
其他 git 技巧
- git commit --amend:修改前一次 commit
- git commit --squash:更動 commit
- git rebase:把兩條分支「整併」成一條
- github 上不要有更動 commit 的行為,不然會炸裂
- git blame:抓兇手
對前面觀念熟悉、正確的習慣再來學
作業
END
時光機的崛起:版本控制軟體--git
By Hsu Heng Yu
時光機的崛起:版本控制軟體--git
2016 板中資訊社暑期課程 (3) CC-BY-NC-SA 4.0 by 許恆與 (a.k.a. m80126colin)
- 209