Submit Search
Upload
Git Tutorial
•
3 likes
•
867 views
Drake Huang
Follow
c4Lab 2014 暑期訓練課程
Read less
Read more
Software
Report
Share
Report
Share
1 of 79
Download now
Download to read offline
Recommended
幸福快樂的完美結局
幸福快樂的完美結局
Anna Su
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
PingLun Liao
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
flylon
Git由超淺入超深
Git由超淺入超深
羊 小咩 (lamb-mei)
Introduction to git
Introduction to git
Bo-Yi Wu
Git Tutorial 教學
Git Tutorial 教學
Wen-Tien Chang
連哈秋都懂的Git教學
連哈秋都懂的Git教學
hydai
工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
Recommended
幸福快樂的完美結局
幸福快樂的完美結局
Anna Su
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
PingLun Liao
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
flylon
Git由超淺入超深
Git由超淺入超深
羊 小咩 (lamb-mei)
Introduction to git
Introduction to git
Bo-Yi Wu
Git Tutorial 教學
Git Tutorial 教學
Wen-Tien Chang
連哈秋都懂的Git教學
連哈秋都懂的Git教學
hydai
工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
版本控制 使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
Git & git hub v1.2
Git & git hub v1.2
Chris Chen
Git 入门实战
Git 入门实战
icy leaf
Git in a nutshell
Git in a nutshell
Nelson Tai
初心者 Git 上手攻略
初心者 Git 上手攻略
Lucien Lee
Git 入門與實作
Git 入門與實作
奕浦 郭
Git基礎介紹
Git基礎介紹
Max Ma
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)
Cloud Tu
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
版本控制 - Mercurial
版本控制 - Mercurial
Cheyin L
Git 教學
Git 教學
Ming-Sian Lin
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
Jui An Huang (黃瑞安)
Mercurial簡介與教學
Mercurial簡介與教學
芳本 林
版本控制
版本控制
Wen-Hsien SU
Git與source tree 基礎教學
Git與source tree 基礎教學
Duncan Chen
A successful git branching model 導讀
A successful git branching model 導讀
Wen Liao
Git 經驗分享
Git 經驗分享
Mu Chun Wang
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)
Hsin-lin Cheng
Git and Github basic with SourceTree
Git and Github basic with SourceTree
Chu-Siang Lai
Git使用入门
Git使用入门
dpf2e
20150313 ian git
20150313 ian git
LearningTech
More Related Content
What's hot
版本控制 使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
Git & git hub v1.2
Git & git hub v1.2
Chris Chen
Git 入门实战
Git 入门实战
icy leaf
Git in a nutshell
Git in a nutshell
Nelson Tai
初心者 Git 上手攻略
初心者 Git 上手攻略
Lucien Lee
Git 入門與實作
Git 入門與實作
奕浦 郭
Git基礎介紹
Git基礎介紹
Max Ma
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)
Cloud Tu
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
版本控制 - Mercurial
版本控制 - Mercurial
Cheyin L
Git 教學
Git 教學
Ming-Sian Lin
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
Jui An Huang (黃瑞安)
Mercurial簡介與教學
Mercurial簡介與教學
芳本 林
版本控制
版本控制
Wen-Hsien SU
Git與source tree 基礎教學
Git與source tree 基礎教學
Duncan Chen
A successful git branching model 導讀
A successful git branching model 導讀
Wen Liao
Git 經驗分享
Git 經驗分享
Mu Chun Wang
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)
Hsin-lin Cheng
Git and Github basic with SourceTree
Git and Github basic with SourceTree
Chu-Siang Lai
What's hot
(20)
版本控制 使用Git & git hub
版本控制 使用Git & git hub
Git & git hub v1.2
Git & git hub v1.2
Git 入门实战
Git 入门实战
Git in a nutshell
Git in a nutshell
初心者 Git 上手攻略
初心者 Git 上手攻略
Git 入門與實作
Git 入門與實作
Git基礎介紹
Git基礎介紹
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
版本控制 - Mercurial
版本控制 - Mercurial
Git 教學
Git 教學
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
Mercurial簡介與教學
Mercurial簡介與教學
版本控制
版本控制
Git與source tree 基礎教學
Git與source tree 基礎教學
A successful git branching model 導讀
A successful git branching model 導讀
Git 經驗分享
Git 經驗分享
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)
Git and Github basic with SourceTree
Git and Github basic with SourceTree
Similar to Git Tutorial
Git使用入门
Git使用入门
dpf2e
20150313 ian git
20150313 ian git
LearningTech
Git+使用教程
Git+使用教程
gemron
20170510 git 懶人包
20170510 git 懶人包
Chen-Ming Yang
Git and git hub
Git and git hub
唯 李
First meetingwithgit
First meetingwithgit
Rhythm Sun
Git Essence Tutorial
Git Essence Tutorial
Ho Kim
Git基础培训
Git基础培训
诸葛修车网-诸葛商城
Git 使用介绍
Git 使用介绍
medcl
Git初步入門
Git初步入門
recast203
Git introduction
Git introduction
mythnc
Git share
Git share
mactanxin
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
Bachue Zhou
Git原理与实战 201607
Git原理与实战 201607
Charles Tang
Github簡介
Github簡介
Radian Jheng
Learn git
Learn git
甘 李
Git 实战
Git 实战
Edward Lee
Git内部培训文档
Git内部培训文档
superwen
Git & git flow
Git & git flow
Amo Wu
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
Alan Tsai
Similar to Git Tutorial
(20)
Git使用入门
Git使用入门
20150313 ian git
20150313 ian git
Git+使用教程
Git+使用教程
20170510 git 懶人包
20170510 git 懶人包
Git and git hub
Git and git hub
First meetingwithgit
First meetingwithgit
Git Essence Tutorial
Git Essence Tutorial
Git基础培训
Git基础培训
Git 使用介绍
Git 使用介绍
Git初步入門
Git初步入門
Git introduction
Git introduction
Git share
Git share
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
Git原理与实战 201607
Git原理与实战 201607
Github簡介
Github簡介
Learn git
Learn git
Git 实战
Git 实战
Git内部培训文档
Git内部培训文档
Git & git flow
Git & git flow
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
More from Drake Huang
The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1
Drake Huang
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)
Drake Huang
Software Testing Project: Testing csmap program
Software Testing Project: Testing csmap program
Drake Huang
使用 Spark 計算 differential expression
使用 Spark 計算 differential expression
Drake Huang
A Short Guide to the E-utilities
A Short Guide to the E-utilities
Drake Huang
Introduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdmin
Drake Huang
More from Drake Huang
(6)
The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)
Software Testing Project: Testing csmap program
Software Testing Project: Testing csmap program
使用 Spark 計算 differential expression
使用 Spark 計算 differential expression
A Short Guide to the E-utilities
A Short Guide to the E-utilities
Introduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdmin
Git Tutorial
1.
Git Tutorial Jian-Long Huang @c4Lab
14/7/17
2.
2 什麼是版本控制 (version control)
? 在軟體開發的過程中,程式碼每天不斷的產生,過程中會 發生以下狀況: 1. 檔案被別人或自己覆蓋,甚至遺失 2. 想恢復昨天寫的版本 3. 想知道跟昨天寫的差在哪裡 4. 是誰改了這段程式碼,為什麼 5. 軟體發行需要分成維護版和開發版
3.
3 常見檔案管理方式 直接修改法 複製貼上法 FTP
共同管理法
4.
4 直接修改法 修改 修改 直接在原資料夾修改檔案內容
5.
5 面臨問題 我這次到底修改了什麼 改錯檔案怎麼辦 檔案被我改壞掉,明天要
demo 給老闆怎麼辦
6.
6 複製貼上法 每修改到一定次數就 copy 一次資料夾 複製
& 修改 複製 & 修改
7.
7 面臨問題 這份複製是從那一份複製 copy
來的 這份複製改了什麼 每一份複製都有重複內容,很佔硬碟空間
8.
8 多人協作?
9.
9 FTP 共同管理法 用 FTP
來存放共同開發的檔案
10.
10 面臨問題 誰修改了我的檔案 我改的東西,別人會不會也正在改 別人改了什麼
11.
11
12.
12 因此 我們希望有一種機制,可以幫助我們: 1. 可以隨時復原修改,回到之前版本 2. 多人協作時,不會把別人的東西蓋掉 3.
保留修改紀錄,以供查詢 4. 軟體發行時,可以方便管理不同版本
13.
13 什麼是 Git ? 開源的分散式版本控制系統 Distribution
Version Control System (DVCS)
14.
14 Git 簡史 Linus
Torvalds 發明 基於 BitKeeper 經驗設計 目的是管理 Linux Kernel 原始碼 2005/4/3 誕生 2005/4/6 第一版發布 2005/6/16 開始管理 Linux Kernel 原始碼
15.
15 誰在用 Git ?
Git X.org PostgreSQL Wine Fedora Samba Eclipse Qt Ruby on Rails Gnome Debian Perl
16.
16 Git 特性 分散式版本控制 非線性開發模式
內容定址 (content-addressable) 檔案系統
17.
17 集中式
18.
18 分散式
19.
19 集中式版本控制系統的缺點 沒有網路就不能開發 做什麼事情都要排隊 單點故障風險
(Single point of failure)
20.
20 分散式版本控制系統的優點 參與 Git
開發的每個人,都擁有完整的開發歷史紀錄 當開發人員第一次將 Git 儲存庫複製 (clone) 下來後,完 全等同於這份 Git 儲存庫的完整備份 不需要網路連線就可以獨立運作 當主機損毀時,皆可透過任何一個客戶端先前複製的資 料還原到伺服器
21.
21 非線性開發模式 每個人可以按照自己的步調開發 開分支和合併都相當容易
22.
22 用 Git 表示台北捷運 http://gugod.org/2009/12/git-graphing/
23.
23 內容定址檔案系統 將檔案內容經過 SHA1
運算所得到一個雜湊值當作檔案 路徑名稱 內容一樣的檔案可以 reuse
24.
24 其他 SCM 的版本儲存方式 只儲存差異的部份
25.
25 Git 的版本儲存方式 利用有向無環圖 (DAG)
建立快照 (snapshot) ,相同內容只會有一份紀錄
26.
26 儲存庫 (repository) 用來儲存所有版本的一個空間(在
Git 是一個資料夾與 一堆檔案) 建立儲存庫: git init 產生 .git 資料夾,就是一個完整的 Git 儲存庫
27.
27 工作目錄 (working directory)
別名 working tree 我們正在準備開發的專案檔案,無論是新增檔案、修改 檔案、刪除檔案、檔案更名,都是在這個目錄下完成 使用 Git 相關指令的時候,也是在工作目錄下完成
28.
28 Git 資料結構 Git
有兩種資料結構,分別是物件 (object) 和索引 (index)
29.
29 Git 物件 透過內容產生一組
SHA1 雜湊值,然後依照這個雜湊值 所命名的一個檔案 所有物件經過 Zlib 演算法進行壓縮,並儲存 在 .git/objects/ 目錄裡面,稱為物件資料庫 物件資料庫只會增加資料、不會減少 裡面的資料都是不可變 (immutable) 四種物件類型: blob 、 tree 、 commit 及 tag
30.
30 範例 一個 Ruby library
專案
31.
31 blob 物件 記錄檔案內容
32.
32 tree 物件 記錄特定目錄下的資訊,包含檔名、對應 的 blob
物件名稱以及其他 tree 物件
33.
33 commit 物件 記錄提交訊息及所包含的 tree
物件 (及上一層 commit 物件名稱) 每一個 commit 物件都是一個版本
34.
34 commit 物件內容 第一次 commit 第二次以後的
commit ,包含上一層 commit 物件名稱
35.
35 tag 物件 記錄一個 commit
物件(或 blob 、 tree 物件)及 tag 名稱
36.
36 http://youtu.be/PZbSRy_ow0U 物件關係圖 (= DAG!)
37.
37 物件名稱 由 SHA1
運算出來的值,稱為物件的絕對名稱 前面 4 碼 ~40 碼都可以代替絕對名稱 以下的指令都可以達到相同目的 git cat-file -p 07c1321be49815d53eb2413f0ad5286010ebb6cc git cat-file -p 07c1 git cat-file -p 07c132
38.
38 參照 物件絕對名稱的別名 (alias)
或指標 目的是方便記憶 每一個參照都對應到一個 Git 物件絕對名稱
39.
39 Git 參照 .git/refs/heads/
(本地分支參照) .git/refs/remotes/ (遠端分支參照) .git/refs/tags/ (標籤) 分支參照指向該分支的最新 commit 物件名稱
40.
40 Git 內建參照 儲存在
.git/ 下 HEAD: 指向目前分支或目前 commit 物件名稱 ORIG_HEAD: 指向 HEAD 的前一版 FETCH_HEAD: 指向遠端儲存庫各分支的 HEAD MERGE_HEAD: 執行合併工作時,指向合併來源的 commit 物件名稱
41.
41 開分支不用錢 建立分支 (branch)
和標籤 (tag) 事實上等於建立參照, 參考到已經建好的 commit 物件名稱 不會有額外負擔(佔空間、耗資源等等)
42.
42 Git 索引 索引檔:
.git/index 包含檔案路徑、對應的 blob 物件和權限 記錄「有哪些檔案即將要被提交到下一個 commit 版本 中」 在提交的時候,索引檔內容用來產生 tree 物件
43.
43 操作索引檔 檢視: git
ls-files 新增檔案: git add 移動檔案: git mv 移除檔案: git rm 檢視工作目錄狀態: git status 記錄變更: git commit
44.
44 索引別名 index (索引)
cache (快取) directory cache (目錄快取) current directory cache (當前目錄快取) staging area (等待被 commit 的地方) staged files (等待被 commit 的檔案)
45.
45 檔案的四種狀態 Untracked files Changes not staged
for commit Changes to be committed Committed 索引 目前版本
46.
46 git status 檢視檔案在索引和目前版本之間的差異 Untracked
files 索引和目前版本都沒有 Changes not staged for commit 索引沒有 – new file: 目前版本沒有 – modified: 目前版本有 Changes to be committed 索引有 – new files: 目前版本沒有 – modified: 目前版本有
47.
47 git add 將工作目錄變更寫到索引檔中 git
add -u: 僅將「更新」或「刪除」的檔案寫到索引檔 中
48.
48 git rm rm:
從檔案系統裡面刪除檔案,但未更新到索引檔中 git rm: 刪除檔案同時也更新到索引檔 – 相當於 rm + git add -u git rm --cached: 更新「刪除檔案」到索引檔,但保留工 作目錄下的實體檔案
49.
49 git mv 將檔案重新命名並更新到索引檔 – 相當於
mv + git add -u
50.
50 git commit 將檔案狀態為
Changes to be committed 及 Committed 的檔案提交變更成一個 commit 物件
51.
51 git ls-files 列出所有目前已經儲存在「索引檔」中的那些檔案路 徑,預設包含目前版本的所有檔案
52.
52 安裝 Git yum
install git-core apt-get install git Mac: http://sourceforge.net/projects/git-osx-installer/ Windows: http://msysgit.github.io/
53.
53 Git GUI GitX
(Mac) GitHub Windows (Win), SourceTree (Mac, Win) TortoiseGit (Win) SmartGit/Hg (Mac, Win and Linux)
54.
54 基本設定 編輯 ~/.gitconfig
或輸入以下指令 git config --global user.name 'Your name' git config --global user.email 'Your@email.com' git config --global color.ui true git config --global core.editor 'vi'
55.
55 建立儲存庫 mkdir git-demo
cd git-demo git init
56.
56 第一次 commit touch
README git add README git status git commit -m 'First commit'
57.
57 修改檔案 編輯 README
做些變更 git status git diff git add . (加入所有變更,但不包括刪除檔案) git status git diff --cached git commit -m 'Update README'
58.
58 建立新檔,刪除舊檔 git touch
hello.sh git rm README (或 rm README; git add -u . ) git status git add hello.sh git commit -m 'Remove README; add hello.sh' git log
59.
59 只 commit 部份檔案
touch a.pl touch b.pl git add a.pl git commit -m 'Add a.pl' git add b.pl git commit -m 'Add b.pl'
60.
60 add 之後又修改內容 修改
hello.sh 做些變更 git add hello.sh 再次修改 hello.sh 做些變更 git commit -m 'Add contents to hello.sh' – 這時 commit 內容只包含第一次修改的內容
61.
61 重置索引 想把原本加入到索引檔的檔案恢復成尚未加入 (unstaged) 的狀態 git
touch Temp git add Temp git status git reset git status
62.
62 重置索引(二) 恢復被刪除或更新的檔案,需加 --hard
git rm hello.sh git reset --hard
63.
63 還原被改壞的檔案 想把改壞的檔案恢復到上一次 commit
的狀態 編輯 hello.sh 做些變更 git status git checkout -- hello.sh git status cat hello.sh git log
64.
64 查詢歷史紀錄 git log
git log -10 (限定輸出 10 筆記錄)
65.
65 比較版本差異 git diff
( working tree 比較當前版本) git diff <SHA1> ( working tree 比較 <SHA1> ) git diff <SHA1> <SHA1> (比較兩個版本) git diff --stat <SHA1> git diff --cached ( staging area 比較當前版本)
66.
66 刪除 untracked 檔案
git clean -n (列出打算要清除的檔案) git clean -f (刪除 untracked 檔案) git clean -x (連 .gitignore 列的檔案都刪除)
67.
67 設定忽略清單 需手動建立 .gitignore
檔案來定義忽略清單 .gitignore 所定義的檔名或路徑將不會被加入索引 https://github.com/github/gitignore
68.
68 Git 分支—什麼時候用? New
features Bug fixes 重構 任何實驗
69.
69 查看分支 預設是 master
git branch master HEAD
70.
70 建立分支 git branch
develop git branch develop master HEAD
71.
71 在分支上建立不同版本 echo master
>master.txt git add master.txt git commit -m 'Add master to master.txt' develop master HEAD
72.
72 在分支上建立不同版本 git checkout
develop (切換到 develop 分支) develop master HEAD
73.
73 在分支上建立不同版本 echo develop
>develop.txt git commit -m 'Add develop to develop.txt' develop master HEAD
74.
74 將 develop 合併到
master git checkout master git merge develop develop master HEAD
75.
75 合併衝突 (merge CONFLICT) 兩個分支都在修改同一個檔案,內容不同時
衝突檔案內容會出現 <<<<< ===== >>>>>> 手動解決或 git reset --hard 放棄合併
76.
76 Git 遠端操作 事實上就是本地分支和遠端分支之間的合併 產生
ssh key: ssh-keygen -t rsa -b 4096 -C 'yourname@hostname' 將 ~/.ssh/id_rsa.pub 上傳到遠端伺服器 ( GitHub 、 Gitolite )
77.
77 上傳儲存庫到遠端伺服器 在 GitHub
新增一個專案 git-demo git remote add origin git@github.com:your_account/git- demo.git git push -u origin master (加 -u 預設追蹤 origin 的 master 分支) 之後只需要打 git push 進行分支合併 如果出現 ![rejected] 表示衝突,需先 git pull 合併
78.
78 下載已經存在的儲存庫 SSH 協定 –
可以設定讀寫權限 – git clone git@github.com:your_account/git-demo.git HTTPS 協定 – 只有讀取權限 – git clone https://github.com/your_account/git-demo.git
79.
79 參考資料 Git Internals
PDF https://github.com/pluralsight/git-internals-pdf ihower Git 教學 http://ihower.tw/git/ 30 天精通 Git 版本控管 https://github.com/doggy8088/Learn-Git-in-30-days 那些台灣軟體產業所缺少的–版本控制系統 http://blog.ez2learn.com/2011/10/20/taiwan-software-lacking-of-vcs/ Pro Git http://git-scm.com/book/zh-tw/
Download now