More Related Content
Similar to Learn git (20)
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 都是一个完整的版本库
• 时刻保持数据的完整性
• 不依赖中心服务器
• 更好的多人协作
• 更多的惊喜等待发现
- 8. Git 原理
• 每个 commit 包含提交
的详细信息
(parent,tree,author 等 )
• tree 对象中包含该次提
交的具体 blob 对象
• blob 对象中包含着提交
的具体内容
• 几种对象结合在一起构
成 git 的文件系统
- 10. Git 原理
• HEAD 指针指向我们当
前的工作分支
• 当我切换到 testing 分
支时 ,HEAD 也指向了
testing 当前的快照
- 11. Git 原理
• 在 testing 分支产生了
一次提交后 , 分支和
HEAD 指针一起指向了
新的快照
• 切换回 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
- 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