SlideShare a Scribd company logo
1 of 40
Git 入門與實作
Presentor: YiPo
Date: 2014-12-25, 26
1
關於此課程
• 共 2 + 1 天
• 現場操作 + 能動的例子
• 要做 回家作業
• 回答 昨日/作業 疑問
2
3
安裝
config
init
Staging Area
commit
.gitignore
push
clone
branch
merge (Conflict)
push & pull
s
1 2
s
1 2
s
1
Day 1 Day 2
1
Git
• 源自 Linux 的 Command-line 程式
– 比較難入門
– 不怕,有各式圖形介面。
– 但是,整合 有賺有賠 有完整有缺漏,
仍須以 Command-line 為準。
• 這裡以圖形操作為主,指令為輔。
4
Git GUIs
5
Linux Windows Mac
gitg
tig
Git Extensions
SourceTree
Tower
01
安裝 Git Extentions
Command-line
Debian: apt-get install git
Windows: msysgit
http://git-scm.com/download/win
Git Extensions
1. 需 .NET Framework 4.0
(Windows 7 於 Windows Update 勾選即可)
2. Google “git ext” 就能找到載點
http://sourceforge.net/projects/gitextensions/
3. 某一步要勾些東西。
4. 其他就,下一步…
6
7
8
9
02
設定 name 與 email
對應指令
git config --global user.name <name>
git config --global user.email <email>
操作
1. 填填
Git Extensions 其他設定,按 Repair。
10
Config – 三個地方
• 每個專案,可以套用不同設定。
• 自己使用,沒納入版本控制,不影響別人。
11
參數 作用範圍 Linux Windows
--system 整個系統 /etc/gitconfig C:Program FilesGitetcgitconfig
--global 各別使用者 ~/.gitconfig C:UserYiPo.gitconfig
(不加參數) 各別專案 .git/config (同左)
Config – core.autocrlf
幫你處理 Linux 與 Windows 間,換行方式的轉換。
12
core.autocrlf Checkout Commit
true Windows   Linux
input -  Linux
false - -
Git Extensions 概觀
分支圖
為何修改?
是誰?何時?
分支/標籤
改了哪些檔案?
diff
13
Repository & Working Directory
Working Directoty
(工作目錄)
Repository
(版本庫) .git/ (隱藏資料夾)
14
版本庫哪來?
• 建立 (Init) 全新的版本庫
– 準備好你的資料夾
– 另外有一種 純的 (Bare) 版本庫
• 無工作目錄,供伺服器用,通常就命名為 “FooBar.git”。
• 複製 (Clone) 現有的版本庫
– 來源可以是 本機目錄、http、ssh、git。
明天就有 現有的版本庫 可以練習了,今天先建立全新的。
15
任務:The robot class
一維空間上移動的機器人
 .where() 回傳機器人的位置
 .forward() 向前進
 .backward() 往後退
16
03
建立版本庫
對應指令
git init [--bare]
操作
1. 我們準備一個 VC++ Empty Project
1. File > New > Project…
2. Visual C++ > General > Empty Project
2. 資料夾上按右鍵。
17
Staging Area
不要再爭辯 Staging Area 的好壞啦!
• Staging Area 裡保存的東西,才會被 Commit。
– 就當作是 SVN 裡,給檔案打勾勾。
– 只是 Staging Area 它記錄的是個狀態。
Working
Directory
Staging
Area Repositoryadd commit
18
04
操作 Staging Area
對應指令
git add, git reset,
git checkout, git mv, git rm, …
操作
1. 點點滑鼠
Repository
add
Working
Directory
Staging
Area
19
05
Commit!
對應指令
git commit
操作
1. 輸入 Commit 訊息
2. 按下 Commit
• 什麼是 Amend?
– 上個 Commit 忘記東西的時候用,
– 不要 對 已分享出去的 Commit 這麼做。
20
.gitignore
• 下列物品不要進版本庫:
– 原始碼就能產生的檔案 (.o, .exe, .dll, …)
– 暫存檔 (.tmp)、日誌檔 (.log)
– 個人設定、密碼
• 編輯檔案 “.gitignore” ,一併納入版本控制。
• 各種現成的 .gitignore 設定:
github/gitignore (https://github.com/github/gitignore)
21
06
設定 .gitignore
舉例來說…
任何目錄下的檔案 *.tmp
任何目錄下的目錄 Debug/
根目錄下的檔案 /*.log
操作
1. 編輯 .gitignore
2. 納入版本控制
22
先寫個殼
• main.cpp
– 能夠選擇指令 (1, 2, 3) 的 while 迴圈
• robot.h
– .where() 先直接 return 0; 吧
– 省略 robot.cpp
23
Push & Fetch/Pull
分散式 嘛 人人平等。
別人的版本庫:remote
• Push  remote
branch to branch, 權限需要
• Fetch  remote
成為 “remote/branch”
• Pull = Fetch + Merge
push
pull
24
Fetch vs Pull – nothing commit yet
Fetch
只抓資料下來
Pull
還做了 Merge
origin/master
master
origin/master master
25
Fetch vs Pull – something commited
Fetch
只抓資料下來
Pull
還做了 Merge
origin/master master
master
origin/master
能不能像 SVN 那樣
接著在後面 commit?
 Rebase 26
Merge vs Rebase
Merge Rebase
27
master
origin/master
master
origin/master
07
Push
對應指令
git remote
git push <remote> <branch>
操作
1. 新增遠端版本庫
• Repository > Remote Repositories…
• 取個名字、填入路徑
2. 按 Push
28
DAY 2
Git 入門與實作
29
Day 1 Questions
• Stage 個別檔案失敗…
– 應該要可以
• 我 Push 成功了嗎?
– 相信它,看 remote/branch 便是。
– 仍不放心,可以 Browse 純版本庫。
– 往後用 GitLab Server,有網頁可看。
• 為什麼有兩個 master?
– 應該是 Git Extensions 的問題
• 子錄目裡還可以有 .gitignore 嗎?可以
– 外面的會影響裡面的
30
防止沒人發問的一頁
• 單獨 checkout 個別檔案、個別子目錄?不能
– 應該視專案為完整個體。
• 記錄空資料夾?不能
– .gitkeep 或 .gitignore。
• 曾經納入過版本庫的檔案,
就再也 .gitignore 不掉了?對,很怪…
31
任務:The robot class
master
一維空間上移動的機器人
 .where() 問位置
 .forward() 向前進
 .backward() 往後退
feature
還要能夠取名字
 robot(str) 取名字
 .who() 問名字
name
32
08
Clone
對應指令
git clone <path> [dir]
操作
1. 在資料夾上按右鍵
昨天尚未練習的 Clone
別急著刪掉昨天的版本庫,
晚點還可試試 Pull。
33
09
操作 Branch
對應指令
git branch <branch>
git checkout [-b] <branch>
操作
1. 在 Commit 上按右鍵
34
Coding Dojo
開個 feature branch,並完成各自功能。
35
Merge
• 於所在分支,做 Commit,將指定分支納入。
– 該切到哪個分支,指定哪個分支,要弄對。
• 萬一 Conflict !?
1. 處理 Conflict
2. 丟進 Staging Area 並 Commit
36
<<<<<<<
x=func();
=======
func(3.14);
>>>>>>>
x=func(3.14)
10
Merge & 解 Conflict
對應指令
git merge <branch>
操作
1. 切換至對的 Branch
2. Commands > Merge brances…
(↓ 若發生 Conflict)
3. 處理 Conflict
4. 丟進 Staging Area 並 Commit
37
11
Push & Pull
對應指令
git pull
操作
1. 按 綠色向下按鈕
昨天尚未練習的 Pull
先在 版本庫2 Push;
再到 版本庫1 Pull。
38
s
1 2
延伸閱讀
• Git Reference (http://gitref.org/)
– 指令快速上手
• Pro Git (http://git-scm.com/book/)
– 完整詳盡的免費電子書
• git ready (http://gitready.com/)
– 單元式介紹
• Git 版本控制系統 (https://ihower.tw/git/)
– ihower 寫的書
39
40

More Related Content

What's hot

Mercurial簡介與教學
Mercurial簡介與教學Mercurial簡介與教學
Mercurial簡介與教學芳本 林
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學Duncan Chen
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹Adison wu
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學littlebtc
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局Anna Su
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用Will Huang
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Cloud Tu
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理彼得潘 Pan
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1Alan Tsai
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 GitCalvin Huang
 
git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學Doremi Lin
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍medcl
 

What's hot (20)

Mercurial簡介與教學
Mercurial簡介與教學Mercurial簡介與教學
Mercurial簡介與教學
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
Git由超淺入超深
Git由超淺入超深Git由超淺入超深
Git由超淺入超深
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
電子內容管理 使用Git 與 github 1
電子內容管理   使用Git 與 github 1電子內容管理   使用Git 與 github 1
電子內容管理 使用Git 與 github 1
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git
 
git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍
 

Viewers also liked

Batch 溫故/知新
Batch 溫故/知新Batch 溫故/知新
Batch 溫故/知新奕浦 郭
 
TED Talks 說話的力量-18 十六種創新的演講技巧
TED Talks 說話的力量-18 十六種創新的演講技巧TED Talks 說話的力量-18 十六種創新的演講技巧
TED Talks 說話的力量-18 十六種創新的演講技巧mouson chen
 
Git 實務圖解
Git 實務圖解Git 實務圖解
Git 實務圖解Pokai Chang
 
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップRAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップKaz Aiso
 

Viewers also liked (6)

Git intro
Git introGit intro
Git intro
 
Batch 溫故/知新
Batch 溫故/知新Batch 溫故/知新
Batch 溫故/知新
 
TED Talks 說話的力量-18 十六種創新的演講技巧
TED Talks 說話的力量-18 十六種創新的演講技巧TED Talks 說話的力量-18 十六種創新的演講技巧
TED Talks 說話的力量-18 十六種創新的演講技巧
 
Git 實務圖解
Git 實務圖解Git 實務圖解
Git 實務圖解
 
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップRAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
 
Git 經驗分享
Git 經驗分享Git 經驗分享
Git 經驗分享
 

Similar to Git 入門與實作

Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)flylon
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹PingLun Liao
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607Charles Tang
 
Learn git
Learn gitLearn git
Learn git甘 李
 
Git introduction
Git introductionGit introduction
Git introductionmythnc
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgitRhythm Sun
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作Bo-Yi Wu
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包Chen-Ming Yang
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2Chris Chen
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922Earou Huang
 
Git and git hub
Git and git hubGit and git hub
Git and git hub唯 李
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree哲 于
 

Similar to Git 入門與實作 (20)

Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
Learn git
Learn gitLearn git
Learn git
 
Git introduction
Git introductionGit introduction
Git introduction
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
 
Github簡介
Github簡介Github簡介
Github簡介
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
Git基础培训
Git基础培训Git基础培训
Git基础培训
 
Git 教學
Git 教學Git 教學
Git 教學
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree
 
Git 实战
Git 实战Git 实战
Git 实战
 

Git 入門與實作