狠狠撸

狠狠撸Share a Scribd company logo
每个人都会用的 git
       git 基础教学


  gavin.li1986@gmail.com

  ( 大部分内容基于《 Pro Git 》整理而成 )
? Git 介绍
? Startup
? Git Basic
? Git work-flow
? Extend
Git 介绍

?   Git 简史

?   Git 设计原则

?   Git 特点

?   Git 原理
Git 简史

?   出现于 2005 年,为了取
    代 BitKeeper 而开发

?   最初用于 linux 内核代码
    管理

?   强大的社区支持
设计原则
?   速度

?   简单的设计

?   对非线性开发模式的强力支持(允许上千个并
    行开发的分支)

?   完全分布式

?   有能力高效管理类似 Linux 内核一样的超大规
    模项目(速度和数据量)
Git 特点
?   几乎所有操作都在本地执行

?   每一份 clone 都是一个完整的版本库

?   时刻保持数据的完整性

?   不依赖中心服务器

?   更好的多人协作

?   更多的惊喜等待发现
Git 原理

? Git 直接记录快照
? 而非差异比较
? 每次提交生成一个新
 的快照
Git 原理
? 每个 commit 包含提交
 的详细信息
 (parent,tree,author 等 )

? tree 对象中包含该次提
 交的具体 blob 对象

? blob 对象中包含着提交
 的具体内容

? 几种对象结合在一起构
 成 git 的文件系统
Git 原理

? 每一个分支就是一个指
 向快照的指针

? 新建一个名为 testing
 的分支于是就有了一个
 新的指针
Git 原理

? HEAD 指针指向我们当
 前的工作分支

? 当我切换到 testing 分
 支时 ,HEAD 也指向了
 testing 当前的快照
Git 原理

? 在 testing 分支产生了
 一次提交后 , 分支和
 HEAD 指针一起指向了
 新的快照

? 切换回 master 分支 , 指
 针仍然指向之前的快照
Git 原理


? 在 master 分支上再进
 行一次提交 .

? “ 分支”就这样产生了
Startup

?   创建一个 git 仓库

?   服务器上的 git

?   git 权限控制
创建一个 git 仓库

?   git init 创建一个新的 git 仓库

?   git clone 从别处克隆一个 git 仓库

?   git clone --bare 克隆一个 git 裸仓库
服务器上的 git

?   git 支持的协议
    ?   本地协议

    ?   ssh 协议

    ?   git 协议

    ?   http/https 协议
Git 权限控制

?   简单的 ssh 权限控制
    ?   为 git 建立一个用户 , 使用公钥进行认证

    ?   通过服务器文件系统控制权限 ( 读写 )

    ?   限制用户使用 git-shell

    使用Gitosis进行更细致的权限控制
?
Git Basic
?   git config

?   git clone/remote

?   git add/commit

?   git status

?   git log

?   ...
git config
?   使用 git 第一件事 , 设置你的用户信息
    ?   $ git config --global user.name "Gavin"
        $ git config --global user.email gavin.li1986@gmail.com


?   git config --global 全局信息
    ?     针对每个 git 仓库设置独立的 config( 不加 --global)

?   编辑器 ,diff 工具 ,color 设置等等
          git 配置
    ?
git clone/remote

?   git clone
    ?   原始仓库默认被添加为 remote 仓库 (origin)

?   git remote
    ?   git remote add/rm/rename ...
git add/commit
?   git 工作区域
    ?   工作区
    ?   暂存区
    ?   版本库

?   git add 增加文件到暂存区

?   git commit 提交版本库

    ?   每次提交内容以一句话
        能说清为佳
                       git 不同文件区示意
git status
?   使用 git status 查看 git 状态时
    , 可能会看到类似上图的状态

    ?   未追踪

    ?   未变化

    ?   修改过的

    ?   已经保存的

                               git 不同文件状态
git log
?   git log 查看提交历史
    ?   本地可以查看所有提交历史

    ?   git log -p 展开每次提交内容差异

    ?   git log --graph(try it)

    ?   git log --pretty 以各种格式显示 log

    ?   每个版本文件清单 , 指定日期 , 作者等 ( 想得到的
        基本都能做到 )
git reset

?   git reset 撤销某次提交
    ?   --mixed 默认方式 ,reset 暂存区的提交

    ?   --hard 完全还原版本 , 默认到 HEAD

    ?   可以使用 git reset --hard HEAD~ 回退到上一版本 (~
        代表 parent
git branch,merge
?   git branch hotfix
    ?  创建分支
    ?  -d 删除分支

?   git merge hotfix( 当前分支是
    master)
    ?  fast-forward 合并

?   右图解释
    ? 上 : 在 master 中新建 2 条分支 ,3 条分支 , 开始均指向 C2,
      在 hotfix 和 iss53 中各进行了一次提交 C4 和 C3
    ? 下 : 在 master 分支上对 hotfix 分支进行了一次合并 , 因为
      master 分支所指向的 C2 是 C4 的祖先分支 , 直接进行了
      一次 fast-forward 合并 ,master 分支直接指向 C4, 无需任
      何其他操作
git branch,merge

?   hotfix 分支合并后被删除 ,iss53 分支则
    又前进了一个版本

?   此时 iss53 分支开发完成 , 将其合并回
    master 分支 , 因为 master 分支 (C4) 不
    在 iss53 分支的祖先链 (C0-C1-C2-C3-
    C5) 中 , 所以 git 自动产生了一个新的提
    交 C6( 此时如果有冲突需要手动合
    并 ),master 指向 C6,C6 包含了 master
    分支和 iss53 分支的所有内容
git checkout

?   checkout 某个版本 , 文件 , 分支
    ?   git checkout testing 签出 testing 分支

    ?   git checkout f6611 签出 f6611 的版本

    ?   git checkout 123 从仓库中取出 123 这个文件 ( 会还
        原工作区的该文件 )
git stash
?   当前工作区下有修改的文件又不想提交

?   需要临时切换到另一个分支修改一些代码

?   git stash 将当前未提交的文件临时保存起来
    ?   git stash pop 取出并删除最近的 stash

    ?   git stash list && git stash apply --index 取出该编号的
        stash
git 与远程仓库

?   git fetch origin

?   git pull origin
    ?   git fetch origin + git merge origin/master

?   git push 推送到远程仓库
更多的 git


?   还有很多没有介绍 ...
    ?   很多方便的功能 , 如 git blame

    ?   重要的功能 , 如 git rebase ,git submodule
Git work-flow


?   集中式工作流

?   集成管理员式工作流 (git hub)
集中式工作流

?   以某一个仓库为主仓库

?   大家都向主仓库推送代码 /
    获取更新

?   参考 :subversion
集成管理员工作流
?   依然有一个主仓库

?   只有仓库的管理员 ( 拥有者 )
    拥有推送权限

?   开发者从主仓库获取更新 , 在
    自己的仓库中进行修改

?   向管理员发出邀请 , 请求拉取
    自己的仓库中的更新

?   参考 : github
Extend

?   git-flow 开发流程

?   一些 git 工具介绍

?   学习资源
git-flow 开发流程

■  主要分支
■ master: 永远处于 production-ready 状态

■ develop: 最新的下次发布开发状态

■ 辅助性分支

■ Feature branches: 开发新功能都从 develop 分支出來,完成后 merge 回 develop

■ Release branches: 准备要 release 的版本,只改 bugs 。从 develop 分支出來,完成後后
  merge 回 master 和 develop

■ Hotfix branches: 等不及 release 版本就必须马上修改 master 并上线的情況。会从 master 分
  支出来,完成后 merge 回 master 和 develop
git 工具介绍

?   windows 下 git 工具
    ?   msysgit

    ?   tortoisegit

?   各种各样的开源工具和插件
学习资源
?   Github
    ?   动手就是最好的学习

?   pro git
    ?   开源免费电子书

?   Learn Git Branching
    ?   一款在线学习 git 的 app

More Related Content

What's hot (20)

Yet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom upYet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom up
Wen-Tien Chang
?
惭别谤肠耻谤颈补濒介绍与教学
惭别谤肠耻谤颈补濒介绍与教学惭别谤肠耻谤颈补濒介绍与教学
惭别谤肠耻谤颈补濒介绍与教学
芳本 林
?
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
?
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
?
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
?
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree
哲 于
?
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台
Will Huang
?
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理
彼得潘 Pan
?
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
Jui An Huang (黃瑞安)
?
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
Duncan Chen
?
開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git
Calvin Huang
?
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
?
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作
奕浦 郭
?
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
Wen Liao
?
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
Lucien Lee
?
Add mailinglist command to gitolite
Add mailinglist command to gitoliteAdd mailinglist command to gitolite
Add mailinglist command to gitolite
琛琳 饶
?
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
PingLun Liao
?
幸福快乐的完美结局
幸福快乐的完美结局幸福快乐的完美结局
幸福快乐的完美结局
Anna Su
?
Git and git hub
Git and git hubGit and git hub
Git and git hub
唯 李
?
Yet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom upYet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom up
Wen-Tien Chang
?
惭别谤肠耻谤颈补濒介绍与教学
惭别谤肠耻谤颈补濒介绍与教学惭别谤肠耻谤颈补濒介绍与教学
惭别谤肠耻谤颈补濒介绍与教学
芳本 林
?
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
?
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
?
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
?
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree
哲 于
?
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台
Will Huang
?
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理
彼得潘 Pan
?
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
Duncan Chen
?
開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git
Calvin Huang
?
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
?
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作
奕浦 郭
?
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
Wen Liao
?
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
Lucien Lee
?
Add mailinglist command to gitolite
Add mailinglist command to gitoliteAdd mailinglist command to gitolite
Add mailinglist command to gitolite
琛琳 饶
?
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
PingLun Liao
?
幸福快乐的完美结局
幸福快乐的完美结局幸福快乐的完美结局
幸福快乐的完美结局
Anna Su
?
Git and git hub
Git and git hubGit and git hub
Git and git hub
唯 李
?

Viewers also liked (20)

Axcess overview v6
Axcess overview v6Axcess overview v6
Axcess overview v6
Mike Putich
?
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
Charles Tang
?
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
ta2c
?
Marketing Plan HR Marketing
Marketing Plan HR MarketingMarketing Plan HR Marketing
Marketing Plan HR Marketing
Impian Hari
?
Chikifriends?Chikifriends?
Chikifriends?
anaiih2
?
Creation 101109231427-phpapp02
Creation 101109231427-phpapp02Creation 101109231427-phpapp02
Creation 101109231427-phpapp02
beckyboks
?
Testing
TestingTesting
Testing
kathyfan728
?
Business Opportunity Presentation
Business Opportunity PresentationBusiness Opportunity Presentation
Business Opportunity Presentation
porkyhawkins
?
Presentation ted1 sayumi
Presentation ted1 sayumiPresentation ted1 sayumi
Presentation ted1 sayumi
srk6
?
T bind 0907879_chapter5
T bind 0907879_chapter5T bind 0907879_chapter5
T bind 0907879_chapter5
indhria
?
Lumineers
LumineersLumineers
Lumineers
StarSmileFramingham
?
Amoeba's general equipment
Amoeba's general equipmentAmoeba's general equipment
Amoeba's general equipment
cv. Amoeba Biosintesa
?
Speak Easy, Achieve More!
Speak Easy, Achieve More!Speak Easy, Achieve More!
Speak Easy, Achieve More!
Dr Nahin Mamun
?
Bangaldesh Regional Dialects
Bangaldesh Regional DialectsBangaldesh Regional Dialects
Bangaldesh Regional Dialects
Dr Nahin Mamun
?
Test pose show
Test pose showTest pose show
Test pose show
rhodad
?
A68f gout final
A68f gout final A68f gout final
A68f gout final
eswar639
?
33d Infantry Brigade Crosswire Issue 3
33d Infantry Brigade Crosswire Issue 333d Infantry Brigade Crosswire Issue 3
33d Infantry Brigade Crosswire Issue 3
33rdibctpao
?
Esthetic Bonding
Esthetic BondingEsthetic Bonding
Esthetic Bonding
StarSmileFramingham
?
Mathura of my Dreams by Rajat Shrivastava
Mathura of my Dreams by Rajat ShrivastavaMathura of my Dreams by Rajat Shrivastava
Mathura of my Dreams by Rajat Shrivastava
Paarth Institute
?
шляпы мышления
шляпы мышленияшляпы мышления
шляпы мышления
master-sva
?
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
Charles Tang
?
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
ta2c
?
Marketing Plan HR Marketing
Marketing Plan HR MarketingMarketing Plan HR Marketing
Marketing Plan HR Marketing
Impian Hari
?
Chikifriends?Chikifriends?
Chikifriends?
anaiih2
?
Creation 101109231427-phpapp02
Creation 101109231427-phpapp02Creation 101109231427-phpapp02
Creation 101109231427-phpapp02
beckyboks
?
Business Opportunity Presentation
Business Opportunity PresentationBusiness Opportunity Presentation
Business Opportunity Presentation
porkyhawkins
?
Presentation ted1 sayumi
Presentation ted1 sayumiPresentation ted1 sayumi
Presentation ted1 sayumi
srk6
?
T bind 0907879_chapter5
T bind 0907879_chapter5T bind 0907879_chapter5
T bind 0907879_chapter5
indhria
?
Speak Easy, Achieve More!
Speak Easy, Achieve More!Speak Easy, Achieve More!
Speak Easy, Achieve More!
Dr Nahin Mamun
?
Bangaldesh Regional Dialects
Bangaldesh Regional DialectsBangaldesh Regional Dialects
Bangaldesh Regional Dialects
Dr Nahin Mamun
?
Test pose show
Test pose showTest pose show
Test pose show
rhodad
?
A68f gout final
A68f gout final A68f gout final
A68f gout final
eswar639
?
33d Infantry Brigade Crosswire Issue 3
33d Infantry Brigade Crosswire Issue 333d Infantry Brigade Crosswire Issue 3
33d Infantry Brigade Crosswire Issue 3
33rdibctpao
?
Mathura of my Dreams by Rajat Shrivastava
Mathura of my Dreams by Rajat ShrivastavaMathura of my Dreams by Rajat Shrivastava
Mathura of my Dreams by Rajat Shrivastava
Paarth Institute
?
шляпы мышления
шляпы мышленияшляпы мышления
шляпы мышления
master-sva
?

Similar to Learn git (20)

Git introduction
Git introductionGit introduction
Git introduction
mythnc
?
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
flylon
?
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
Pu Lee
?
骋颈迟丑耻产介绍及实用入门
骋颈迟丑耻产介绍及实用入门骋颈迟丑耻产介绍及实用入门
骋颈迟丑耻产介绍及实用入门
Rongxing Liu
?
Git & git flow
Git & git flowGit & git flow
Git & git flow
Amo Wu
?
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
icy leaf
?
骋颈迟教学
骋颈迟教学骋颈迟教学
骋颈迟教学
Sitg Yao
?
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
Bachue Zhou
?
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)
Roy Wang
?
骋颈迟基础培训
骋颈迟基础培训骋颈迟基础培训
骋颈迟基础培训
诸葛修车网-诸葛商城
?
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
Ho Kim
?
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
?
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
Rhythm Sun
?
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
Tony Yeh
?
Git 教學
Git 教學Git 教學
Git 教學
Ming-Sian Lin
?
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
Drake Huang
?
骋颈迟丑耻产介绍
骋颈迟丑耻产介绍骋颈迟丑耻产介绍
骋颈迟丑耻产介绍
Radian Jheng
?
Git & git hub v1.2
Git & git hub v1.2Git & git hub v1.2
Git & git hub v1.2
Chris Chen
?
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
Bo-Yi Wu
?
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包
Chen-Ming Yang
?
Git introduction
Git introductionGit introduction
Git introduction
mythnc
?
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
flylon
?
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
Pu Lee
?
骋颈迟丑耻产介绍及实用入门
骋颈迟丑耻产介绍及实用入门骋颈迟丑耻产介绍及实用入门
骋颈迟丑耻产介绍及实用入门
Rongxing Liu
?
Git & git flow
Git & git flowGit & git flow
Git & git flow
Amo Wu
?
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
icy leaf
?
骋颈迟教学
骋颈迟教学骋颈迟教学
骋颈迟教学
Sitg Yao
?
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
Bachue Zhou
?
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)
Roy Wang
?
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
Ho Kim
?
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
?
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
Rhythm Sun
?
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
Tony Yeh
?
骋颈迟丑耻产介绍
骋颈迟丑耻产介绍骋颈迟丑耻产介绍
骋颈迟丑耻产介绍
Radian Jheng
?
Git & git hub v1.2
Git & git hub v1.2Git & git hub v1.2
Git & git hub v1.2
Chris Chen
?
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
Bo-Yi Wu
?

Learn git

  • 1. 每个人都会用的 git git 基础教学 gavin.li1986@gmail.com ( 大部分内容基于《 Pro Git 》整理而成 )
  • 2. ? Git 介绍 ? Startup ? Git Basic ? Git work-flow ? Extend
  • 3. Git 介绍 ? Git 简史 ? Git 设计原则 ? Git 特点 ? Git 原理
  • 4. Git 简史 ? 出现于 2005 年,为了取 代 BitKeeper 而开发 ? 最初用于 linux 内核代码 管理 ? 强大的社区支持
  • 5. 设计原则 ? 速度 ? 简单的设计 ? 对非线性开发模式的强力支持(允许上千个并 行开发的分支) ? 完全分布式 ? 有能力高效管理类似 Linux 内核一样的超大规 模项目(速度和数据量)
  • 6. Git 特点 ? 几乎所有操作都在本地执行 ? 每一份 clone 都是一个完整的版本库 ? 时刻保持数据的完整性 ? 不依赖中心服务器 ? 更好的多人协作 ? 更多的惊喜等待发现
  • 7. Git 原理 ? Git 直接记录快照 ? 而非差异比较 ? 每次提交生成一个新 的快照
  • 8. Git 原理 ? 每个 commit 包含提交 的详细信息 (parent,tree,author 等 ) ? tree 对象中包含该次提 交的具体 blob 对象 ? blob 对象中包含着提交 的具体内容 ? 几种对象结合在一起构 成 git 的文件系统
  • 9. Git 原理 ? 每一个分支就是一个指 向快照的指针 ? 新建一个名为 testing 的分支于是就有了一个 新的指针
  • 10. Git 原理 ? HEAD 指针指向我们当 前的工作分支 ? 当我切换到 testing 分 支时 ,HEAD 也指向了 testing 当前的快照
  • 11. Git 原理 ? 在 testing 分支产生了 一次提交后 , 分支和 HEAD 指针一起指向了 新的快照 ? 切换回 master 分支 , 指 针仍然指向之前的快照
  • 12. Git 原理 ? 在 master 分支上再进 行一次提交 . ? “ 分支”就这样产生了
  • 13. Startup ? 创建一个 git 仓库 ? 服务器上的 git ? git 权限控制
  • 14. 创建一个 git 仓库 ? git init 创建一个新的 git 仓库 ? git clone 从别处克隆一个 git 仓库 ? git clone --bare 克隆一个 git 裸仓库
  • 15. 服务器上的 git ? git 支持的协议 ? 本地协议 ? ssh 协议 ? git 协议 ? http/https 协议
  • 16. Git 权限控制 ? 简单的 ssh 权限控制 ? 为 git 建立一个用户 , 使用公钥进行认证 ? 通过服务器文件系统控制权限 ( 读写 ) ? 限制用户使用 git-shell 使用Gitosis进行更细致的权限控制 ?
  • 17. Git Basic ? git config ? git clone/remote ? git add/commit ? git status ? git log ? ...
  • 18. git config ? 使用 git 第一件事 , 设置你的用户信息 ? $ git config --global user.name "Gavin" $ git config --global user.email gavin.li1986@gmail.com ? git config --global 全局信息 ? 针对每个 git 仓库设置独立的 config( 不加 --global) ? 编辑器 ,diff 工具 ,color 设置等等 git 配置 ?
  • 19. git clone/remote ? git clone ? 原始仓库默认被添加为 remote 仓库 (origin) ? git remote ? git remote add/rm/rename ...
  • 20. git add/commit ? git 工作区域 ? 工作区 ? 暂存区 ? 版本库 ? git add 增加文件到暂存区 ? git commit 提交版本库 ? 每次提交内容以一句话 能说清为佳 git 不同文件区示意
  • 21. git status ? 使用 git status 查看 git 状态时 , 可能会看到类似上图的状态 ? 未追踪 ? 未变化 ? 修改过的 ? 已经保存的 git 不同文件状态
  • 22. git log ? git log 查看提交历史 ? 本地可以查看所有提交历史 ? git log -p 展开每次提交内容差异 ? git log --graph(try it) ? git log --pretty 以各种格式显示 log ? 每个版本文件清单 , 指定日期 , 作者等 ( 想得到的 基本都能做到 )
  • 23. git reset ? git reset 撤销某次提交 ? --mixed 默认方式 ,reset 暂存区的提交 ? --hard 完全还原版本 , 默认到 HEAD ? 可以使用 git reset --hard HEAD~ 回退到上一版本 (~ 代表 parent
  • 24. git branch,merge ? git branch hotfix ? 创建分支 ? -d 删除分支 ? git merge hotfix( 当前分支是 master) ? fast-forward 合并 ? 右图解释 ? 上 : 在 master 中新建 2 条分支 ,3 条分支 , 开始均指向 C2, 在 hotfix 和 iss53 中各进行了一次提交 C4 和 C3 ? 下 : 在 master 分支上对 hotfix 分支进行了一次合并 , 因为 master 分支所指向的 C2 是 C4 的祖先分支 , 直接进行了 一次 fast-forward 合并 ,master 分支直接指向 C4, 无需任 何其他操作
  • 25. git branch,merge ? hotfix 分支合并后被删除 ,iss53 分支则 又前进了一个版本 ? 此时 iss53 分支开发完成 , 将其合并回 master 分支 , 因为 master 分支 (C4) 不 在 iss53 分支的祖先链 (C0-C1-C2-C3- C5) 中 , 所以 git 自动产生了一个新的提 交 C6( 此时如果有冲突需要手动合 并 ),master 指向 C6,C6 包含了 master 分支和 iss53 分支的所有内容
  • 26. git checkout ? checkout 某个版本 , 文件 , 分支 ? git checkout testing 签出 testing 分支 ? git checkout f6611 签出 f6611 的版本 ? git checkout 123 从仓库中取出 123 这个文件 ( 会还 原工作区的该文件 )
  • 27. git stash ? 当前工作区下有修改的文件又不想提交 ? 需要临时切换到另一个分支修改一些代码 ? git stash 将当前未提交的文件临时保存起来 ? git stash pop 取出并删除最近的 stash ? git stash list && git stash apply --index 取出该编号的 stash
  • 28. git 与远程仓库 ? git fetch origin ? git pull origin ? git fetch origin + git merge origin/master ? git push 推送到远程仓库
  • 29. 更多的 git ? 还有很多没有介绍 ... ? 很多方便的功能 , 如 git blame ? 重要的功能 , 如 git rebase ,git submodule
  • 30. Git work-flow ? 集中式工作流 ? 集成管理员式工作流 (git hub)
  • 31. 集中式工作流 ? 以某一个仓库为主仓库 ? 大家都向主仓库推送代码 / 获取更新 ? 参考 :subversion
  • 32. 集成管理员工作流 ? 依然有一个主仓库 ? 只有仓库的管理员 ( 拥有者 ) 拥有推送权限 ? 开发者从主仓库获取更新 , 在 自己的仓库中进行修改 ? 向管理员发出邀请 , 请求拉取 自己的仓库中的更新 ? 参考 : github
  • 33. Extend ? git-flow 开发流程 ? 一些 git 工具介绍 ? 学习资源
  • 34. git-flow 开发流程 ■ 主要分支 ■ master: 永远处于 production-ready 状态 ■ develop: 最新的下次发布开发状态 ■ 辅助性分支 ■ Feature branches: 开发新功能都从 develop 分支出來,完成后 merge 回 develop ■ Release branches: 准备要 release 的版本,只改 bugs 。从 develop 分支出來,完成後后 merge 回 master 和 develop ■ Hotfix branches: 等不及 release 版本就必须马上修改 master 并上线的情況。会从 master 分 支出来,完成后 merge 回 master 和 develop
  • 35. git 工具介绍 ? windows 下 git 工具 ? msysgit ? tortoisegit ? 各种各样的开源工具和插件
  • 36. 学习资源 ? Github ? 动手就是最好的学习 ? pro git ? 开源免费电子书 ? Learn Git Branching ? 一款在线学习 git 的 app