SlideShare ist ein Scribd-Unternehmen logo
1 von 36
每个人都会用的 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

Weitere ähnliche Inhalte

Was ist angesagt?

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 upWen-Tien Chang
 
Mercurial簡介與教學
Mercurial簡介與教學Mercurial簡介與教學
Mercurial簡介與教學芳本 林
 
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
開發用不著打一架 - 分散式版本控制 GitCalvin Huang
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan 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唯 李
 

Was ist angesagt? (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
 
Mercurial簡介與教學
Mercurial簡介與教學Mercurial簡介與教學
Mercurial簡介與教學
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
版本控制 使用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 教學)
 
Submodule && subtree
Submodule && subtreeSubmodule && subtree
Submodule && subtree
 
簡介 GitHub 平台
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台
 
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git開發用不著打一架 - 分散式版本控制 Git
開發用不著打一架 - 分散式版本控制 Git
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
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 上手攻略
 
Add mailinglist command to gitolite
Add mailinglist command to gitoliteAdd mailinglist command to gitolite
Add mailinglist command to gitolite
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 

Andere mochten auch

Axcess overview v6
Axcess overview v6Axcess overview v6
Axcess overview v6Mike Putich
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607Charles Tang
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#ta2c
 
Marketing Plan HR Marketing
Marketing Plan HR MarketingMarketing Plan HR Marketing
Marketing Plan HR MarketingImpian Hari
 
Chikifriends»
Chikifriends»Chikifriends»
Chikifriends»anaiih2
 
Creation 101109231427-phpapp02
Creation 101109231427-phpapp02Creation 101109231427-phpapp02
Creation 101109231427-phpapp02beckyboks
 
Business Opportunity Presentation
Business Opportunity PresentationBusiness Opportunity Presentation
Business Opportunity Presentationporkyhawkins
 
Presentation ted1 sayumi
Presentation ted1 sayumiPresentation ted1 sayumi
Presentation ted1 sayumisrk6
 
T bind 0907879_chapter5
T bind 0907879_chapter5T bind 0907879_chapter5
T bind 0907879_chapter5indhria
 
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 DialectsDr Nahin Mamun
 
Test pose show
Test pose showTest pose show
Test pose showrhodad
 
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 333rdibctpao
 
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 ShrivastavaPaarth Institute
 
шляпы мышления
шляпы мышленияшляпы мышления
шляпы мышленияmaster-sva
 

Andere mochten auch (20)

Axcess overview v6
Axcess overview v6Axcess overview v6
Axcess overview v6
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
 
Marketing Plan HR Marketing
Marketing Plan HR MarketingMarketing Plan HR Marketing
Marketing Plan HR Marketing
 
Chikifriends»
Chikifriends»Chikifriends»
Chikifriends»
 
Creation 101109231427-phpapp02
Creation 101109231427-phpapp02Creation 101109231427-phpapp02
Creation 101109231427-phpapp02
 
Testing
TestingTesting
Testing
 
Business Opportunity Presentation
Business Opportunity PresentationBusiness Opportunity Presentation
Business Opportunity Presentation
 
Presentation ted1 sayumi
Presentation ted1 sayumiPresentation ted1 sayumi
Presentation ted1 sayumi
 
T bind 0907879_chapter5
T bind 0907879_chapter5T bind 0907879_chapter5
T bind 0907879_chapter5
 
Lumineers
LumineersLumineers
Lumineers
 
Amoeba's general equipment
Amoeba's general equipmentAmoeba's general equipment
Amoeba's general equipment
 
Speak Easy, Achieve More!
Speak Easy, Achieve More!Speak Easy, Achieve More!
Speak Easy, Achieve More!
 
Bangaldesh Regional Dialects
Bangaldesh Regional DialectsBangaldesh Regional Dialects
Bangaldesh Regional Dialects
 
Test pose show
Test pose showTest pose show
Test pose show
 
A68f gout final
A68f gout final A68f gout final
A68f gout final
 
33d Infantry Brigade Crosswire Issue 3
33d Infantry Brigade Crosswire Issue 333d Infantry Brigade Crosswire Issue 3
33d Infantry Brigade Crosswire Issue 3
 
Esthetic Bonding
Esthetic BondingEsthetic Bonding
Esthetic Bonding
 
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
 
шляпы мышления
шляпы мышленияшляпы мышления
шляпы мышления
 

Ähnlich wie Learn git

Git introduction
Git introductionGit introduction
Git introductionmythnc
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)flylon
 
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理Pu Lee
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门Rongxing Liu
 
Git & git flow
Git & git flowGit & git flow
Git & git flowAmo Wu
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
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 TutorialHo Kim
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgitRhythm Sun
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片Tony Yeh
 
Git & git hub v1.2
Git & git hub v1.2Git & git hub v1.2
Git & git hub v1.2Chris Chen
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包Chen-Ming Yang
 

Ähnlich wie Learn git (20)

Git introduction
Git introductionGit introduction
Git introduction
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
 
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门
 
Git & git flow
Git & git flowGit & git flow
Git & git flow
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Git教學
Git教學Git教學
Git教學
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)
 
Git基础培训
Git基础培训Git基础培训
Git基础培训
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
 
Git 教學
Git 教學Git 教學
Git 教學
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Github簡介
Github簡介Github簡介
Github簡介
 
Git & git hub v1.2
Git & git hub v1.2Git & git hub v1.2
Git & git hub v1.2
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包
 

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