SlideShare uma empresa Scribd logo
1 de 57
Git & GitHub
SW Chris
1
Outline
Why Git?
Install Git & setting
Git local process
GitHub
Git vs SVN
Appendix
2
Why Git?
集中式版本控制系統(VCS)如 : CVS、Subversion及Perforce
3
優點:
每個人皆能得知其它人對此專案做了
些什麼修改有一定程度的瞭解。
管理員可調整存取權限,限制各使用
者能做的事。
維護集中式版本控制系統也比維護散
落在各使用者端的資料庫來的容易。
缺點:
無法連上伺服器時,開發需要參考歷
史紀錄或是即時commit則必須等到可
以連線的狀態。 如果伺服器用來儲存
資料庫的硬碟損毀,除了本地端電腦
的版本,專案開發的歷史的所有資訊
都會遺失。
Why Git?
分散式版本控制系統(DVCS)如 : Git、Mercurial、Bazaar、Darcs
4
特色:
 客戶端不只是取出最後一版的檔
案,而是完整複製整個儲存庫。
 即使是整個系統賴以運作的電腦
損毀,皆可將任何一個客戶端先
前複製的資料還原到伺服器。
 每一次的取出動作實際上就是完
整備份整個儲存庫。
Repository
SVN: 集中式的管理系統使開發成員
只需對應一個server端的repository。
Checkout 出來的結果會將server上
的檔案copy至user端,所有的
commit, restore甚至查詢歷史紀錄
都需要連上server。
Git : 分散式系統不是用”checkout “,
而是利用clone的方式將檔案copy至
user端。並在本地保有一個local的
repository。這些檔案都保有完整的
歷史資訊,且所有的commit ,
restore 等等的操作都可以在本地端
完成。 5
Install Git
Ubuntu:
$sudo apt-get install git
Fedora:
$sudo yum install git
確認目前Git版本:
$git --version
6
.gitconfig
利用vim .gitconfig 修改相關git帳號及外觀
[user]
name = Chris Chen
email = chris.yn.chen@example.com
[color]
diff = auto
status = auto
branch = auto
interactive = true
7
.bashrc
利用vim ~/.bashrc修改相關環境變數:
function git_branch {
ref=$(git symbolic-ref HEAD 2> /dev/null) || return;
echo "("${ref#refs/heads/}") ";
}
function git_since_last_commit {
now=`date +%s`;
last_commit=$(git log --pretty=format:%at -1 2> /dev/null) || return;
seconds_since_last_commit=$((now-last_commit));
minutes_since_last_commit=$((seconds_since_last_commit/60));
hours_since_last_commit=$((minutes_since_last_commit/60));
minutes_since_last_commit=$((minutes_since_last_commit%60));
echo "${hours_since_last_commit}h${minutes_since_last_commit}m ";
}
PS1="u[[033[1;32m]w[033[0m]]
[033[0m][033[1;36m]$(git_branch)[033[0;33m]$(git_since_last_commit)[033[0m]$ “
*以上加入後請重啟console
8
git init & git clone
有兩種方式匯入Git repository
1. 新增及初始化一個 Git Repository
$ git init
2. 從其它伺服器複製一份已存在的Git儲存庫。
$ git clone [url]
9
.git
.git目錄包含一個Git儲存庫架構必要的所
有檔案。
10
-- 供GitWeb 程式使用
-- 包含了專案特有的配置選項
-- 供GitWeb 程式使用
--指向當前分支
--用戶端或服務端鉤子腳本。
--保存了一份不希望在 .gitignore 檔中管理的忽略模式 (ignored patterns) 的全域可執行檔。
--目錄存放所有資料內容 (包含log)
--目錄存放指向資料 (分支) 的提交物件的指標
git local workflow
11
(git checkout)
(git add)
(git commit)
File Status Lifecycle
12
新增檔案的
狀態屬於
untracked
git add & git status
13
 追蹤新增檔案
$ git add <file>
$ git add --all
 檢視檔案狀態
$ git status
git commit
14
 提交檔案至repository
$ git commit <file>
$ git commit --all
$git commit -a
$ git commit -a -s (s代表sign in your email)
git log
15
 檢視repository 歷史紀錄
$ git log
 檢視repository 歷史紀錄 且包含code diff
$ git log -p
SHA-1查核值
User
日期
Commit 描述
git log
16
 抓log關鍵字
$ git log | -i grep XXX
 抓檔案關鍵字是誰改的
先到該檔案路徑下
$git log -p XXX.java
$/ abc (查詢abc)
若要找下一個按n , 回到第一個p
git diff
版本比較
$ git diff <SHA-1> <SHA-1>
$ git diff --staged
17
git revert
還原之前版本 (commit會繼續往前, 目的是留下紀錄)
$ git revert <SHA-1>
18
A B C D
git branch & git checkout
Local端設置branch
$ git branch <branch name>
切換branch
$ git checkout <branch name>
19
git merge
將某個branch merge至現在branch的位置
$ git merge <branch name>
若B branch 是由A的HEAD分支出來的,之後B的parent
commit 也是A的HEAD,則就是fast-forward merge
20
git merge
Fast-forward merge:
當然 也可以強制不使用fast-forward merge
$ git merge --no-ff <branch name>
21
git merge
遇到conflict的處理狀況:
此時就要和修改相同地方的人
討論一下改正後commit即可
22
git merge
利用圖示確認歷史紀錄
$ git log --graph --oneline
23
git reset & git amend
還原狀態
$ git commit --amend =>commit 還原
$ git reset HEAD <file> => 從staging area 還原至unmodified 狀態
$ git reset --soft HEAD^
$ git reset --hard HEAD^
24
Modify Gerri changes:
$ git add src/com/asus/sensorapi/service/AsusProcess.java
$ git commit --amend
$ git push amax HEAD:refs/changes/53/171153 (後面兩團數為gerri
上的號碼)
git reset
恢復某個檔案至untracked file狀態
$ git reset xxx.java
恢復所有untracked file狀態
$ git reset -- .
25
git rebase
Git rebase 和 git merge有
些不同如右圖:
$ git rebase <new base commit>
26
<<Before>>
<<After>>
git tag
若要像SVN tag版本
$ git tag <name> <SHA-1>
27
git stash
當正在進行專案中某一部分的工作,而想轉到其他分支上進行一些工作。問
題是,不想只為了待會要回到這個工作點,就把做到一半的工作進行提交。
解決這個問題的辦法就是 git stash 命令。
丟進暫存區
$ git stash
取出最新的一筆 stash 暫存資料. 但是 stash 資料不移除
$ git stash pop
列出所有暫存區的資料
$ git stash list
列出所有暫存區的資料
$ git stash apply stash@{2}
取出最新的一筆, 並移除.
$ git stash drop stash@{2}
刪除某個暫存資料
$ git stash clear
把 stash 都清掉 28
git blame
查找特定修改人及log
$ git blame <file>
$ git log
29
Git workflow
30
Staging
Area
31
Repo command
Repo forall
• 回到某一版
先確認build id : build/core/build_id.mk
$ git log |grep LRX21M (LRX21M 是build ID)
$ Git tag => 確認要跳去哪個tag
$ repo_asus forall -c ‘git reset --hard android-5.0.2_r1‘ (後面接tag 即可)
$ repo_asus forall -c 'git reset --hard 044030362_201410070948'
32
GitHub
33
GitHub
https://github.com/
34
Create a repository
35
GitHub
Git 和 GitHub相互溝通有兩種方式:
1. HTTPS (使用密碼,email 和GitHub伺服器驗證)
2. SSH key (使用金鑰 和GitHub伺服器驗證)
– 金要分成公鑰(Public Key) 用來加密 , 私鑰 (Private Key) 用來解密
– SSH會在 ~/.ssh下儲存私鑰, 登入時使用
開始時須打造這兩把鑰匙: (啥? ~/.ssh 找不到??)
自己的鑰匙自己做!
$mkdir ~/.ssh
36
GitHub
37
GitHub
38
GitHub
39
測試GitHub公鑰是否連接正常:
$ ssh –T github.com
GitHub
接著把我們的code push至server上
首先在GitHub的repository中複製SSH
40
GitHub
12345
先加入remote 位置:
$ git remote add <remote name> <your GitHub SSH address>
將檔案push至server:
$ git push <remote name> master
41
GitHub
刪除remote: git remote rm
<target remote>
push 完GitHub上就有相關資訊嘍~
42
GitHub
12345
Your Files
Log and Branch
Current branch
SSH URL
接著試試看push其它的branch至server:
$ git push < remote name > <other branch>
刪除 remote branch的方式:
$ git push <remote name> : <branchName> 43
GitHub
將server 的HEAD update到local repo端:
$ git pull <name> master
*git fetch : 同步遠端伺服器上的資料到本地。
*git pull = git fetch + git merge
44
GitHub
當遇到 conflict 的做法和之前一樣:
修改完, git add + git commit
*git pull = git fetch + git merge
45
GitHub
當遇到 remote 中檔案被刪除時,pull下來的檔案
會直接在本機端工作目錄中刪除。
46
GitHub
在push到remote時有可能遇到以下情況:
此時代表server上有其他更新(non-fast-forward updates),避
免遺失掉歷史紀錄,建議先pull merge後在push吧!
47
GitHub
Git workflow Review
48
Staging
Area
Git gui tool
49
看了這麼多command line是不是眼都花了!?
當然下列有些GUI tool 大家可以自己挑喜歡的用嘍~
Gitg
$ sudo yum install gitg (Fedora)
$ sudo apt-get install gitg (Ubuntu)
Gitk
$ sudo yum install gitk (Fedora)
$ sudo apt-get install gitk (Ubuntu)
Git-cola
$ sudo yum install git-cola (Fedora)
$ sudo apt-get install git-cola (Ubuntu)
Giggle
$ sudo yum install giggle (Fedora)
$ sudo apt-get install giggle (Ubuntu)
Git
50
SVN
Git vs SVN
51
Appendix
52
自動補齊
在bash shell底下可自動補完打到一半的git 指令
Ubuntu:
$sudo apt-get install git-core bash-completion
Fedora:
$sudo yum install git bash-completion
53
自動忽略
Git 可忽略某些檔案,使其無法被add & commit
通常有以下兩種方式:
1. 在專案底下新增.gitignore
2. $GIT_DIR/info/exclude.
54
Fedora 新增帳號
55
Root password :xxx
Fedora 連接網路
56
Fedora setting:
若要連線至網路請選擇橋接介
面卡,並可用ifconfig確認連線
IP address是否正確
Reference
Udacity https://www.udacity.com/
Git SCM http://git-scm.com/book/zh-tw/v1
連猴子都懂的Git入門指南 http://backlogtool.com/git-guide/tw/reference/git-svn.html
Yakiloo http://yakiloo.com/getting-started-git-flow/
Tomtang’s Blog http://it.tomtang.idv.tw/2013/08/svn-git.html
Yorkxin’s Blog http://blog.yorkxin.org/posts/2011/07/29/git-rebase/
Git-tower http://www.git-tower.com/
57

Mais conteúdo relacionado

Mais procurados

初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略Lucien Lee
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub維佋 唐
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學Duncan Chen
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍medcl
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學hydai
 
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Will Huang
 
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Hsin-lin Cheng
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree哲 于
 
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 教學littlebtc
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用Will Huang
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹Adison wu
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 

Mais procurados (20)

初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰
 
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
Git 教學
Git 教學Git 教學
Git 教學
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree
 
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 教學
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 

Semelhante a Git &amp; git hub v1.2

Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607Charles Tang
 
Git使用入门
Git使用入门Git使用入门
Git使用入门dpf2e
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程gemron
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
Git introduction
Git introductionGit introduction
Git introductionmythnc
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包Chen-Ming Yang
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
Git and git hub
Git and git hubGit and git hub
Git and git hub唯 李
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Learn git
Learn gitLearn git
Learn git甘 李
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门Rongxing Liu
 
Git basis - usage
Git basis - usageGit basis - usage
Git basis - usageEason Cao
 
Git内部培训文档
Git内部培训文档Git内部培训文档
Git内部培训文档superwen
 

Semelhante a Git &amp; git hub v1.2 (19)

Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
Git使用入门
Git使用入门Git使用入门
Git使用入门
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Git introduction
Git introductionGit introduction
Git introduction
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包
 
Git share
Git shareGit share
Git share
 
Git 实战
Git 实战Git 实战
Git 实战
 
Git基础培训
Git基础培训Git基础培训
Git基础培训
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Learn git
Learn gitLearn git
Learn git
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门
 
20150313 ian git
20150313 ian git20150313 ian git
20150313 ian git
 
Git basis - usage
Git basis - usageGit basis - usage
Git basis - usage
 
Git内部培训文档
Git内部培训文档Git内部培训文档
Git内部培训文档
 
Git教學
Git教學Git教學
Git教學
 

Git &amp; git hub v1.2

Notas do Editor

  1. version control system
  2. Distributed version control system
  3. 時間為多久沒跟remote push
  4. Info : .gitignore 主要存放忽略哪些檔名 Object: 主要存放log
  5. SHA-1
  6. SHA-1
  7. SHA-1
  8. 空白列或者以#開頭的列會被忽略。 可使用標準的Glob pattern。 可以/結尾,代表是目錄。 可使用!符號將特徵反過來使用。