git代码管理艺术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重演被衍合分支的历史,他是一种线性的合并
2013-12-9
分支管理遇到的问题
多人并行开发,开分支需求多,但分支开销太
大,只能凑合着用 分支合并特别麻烦,项目后期经常为了合并分 支要花费一下午的时间,特别是tree conflict 问题 项目使用时间长后,svn服务器速度越来越慢, 导致svn操作都很慢,喝杯咖啡回来继续
Git版本管理
GIT分支管理在项目中的实践
2013-12-9
离线
Git是完全的分布式处理,它可以离线工作。
跟SVN完全不同,Git的所有操作几乎不需要网 络连接,包括历史回顾,差异显示和提交
2013-12-9
快速
Git比其他的VCS工具要快很多,因为git绝大部
分是离线操作,对网络依赖小
status 查看文件状态 git add <file> 跟踪新文件或暂存已修改文件 git diff 查看文件变化 git commit –m <msg> 提交更新 git rm file 移除文件 git log 查看提交日志 git commit –ammend 修改最后一次提交 git reset HEAD <file> 取消已暂存文件 git checkout -- <file> 取消文件修改
可以从所有历史提交中删除一个文件,悔棋用,
可能你误提交了个私密文件,可以通过这个功 能来从历史提交中全部删除
git
filter-branch --tree-filter 'rm -f passwords.txt' HEAD
2013-12-9
Code review
公司有个gerrit网站,用来做git代码的code
者,日期等等),一个commit指向这次提交 时项目的快照。
2013-12-9
分支
以前的VCS工具分枝的方法是对每一个分枝都
放到一个独立的目录中。而git可以让你在同 一个工作目录中切换(switch)到不同的分枝。 创建和切换分枝几乎是即时的(instant),并 且存在本地分支 git开发者可以随时创建,合并,删除多个分 枝。它鼓励一种非线性的开发周期,它可以说 是并行的多线程模式而不是多个步骤串行的模 式。
2013-12-9
储藏
一个很实用的功能 在git切换分支的时候,他会提示你有未提交的
更新,你需要commit才能切换,但可能当前 代码很乱不能提交 git stash - 将未提交代码储藏 git stash apply- 取出储藏的代码
2013-12-9
变更历史
git允许你修改提交历史,这个很有用,可以减
查看历史版本
log 命令来查看历史版本的提交 git log的操作都是本地操作,基本都能瞬间完 成,比SVN快很多,查看历史版本或进行diff 比较都非常方便 也可以通过git revert操作来回退到历史版本
可以通过git
2013-12-9
查看祖先引用
git
log --pretty=format:'%h %s' --graph
Ø
2013-12-9
分布式版本控制系统
2013-12-9
分布式版本控制系统
像GIT这种系统,客户端并不只提取最新版本
的文件快照,而是把原始的代码仓库完整地镜 像下来。
2013-12-9
比较:SVN(上)和GIT(下)
2013-12-9
大纲
Git简介 Git基础 Git操作
Git版本管理
Ø
2013-12-9
大纲
Git简介 Git基础 Git操作
GIT版本管理
GIT分支管理在项目中的实践
2013-12-9
GIT开分支
Git开分支代价非常小
仅增加几十字节的存储 Ø 开分支不需要管理员来开 Ø 开分支仅需要数秒钟
Ø
2013-12-9
创建分支
Git
branch <branchName> 创建分支 git checkout <branchName> 切换分支
2013-12-9
分支merge-ff
当一个分支是另一个分支的祖父节点,即从该
分支分离后原来分支未做任何改变
2源自文库13-12-9
分支merge-non-ff
当不满足fast-farward条件时,就会发生三方
合并
2013-12-9
衍合分支-rebase
衍合是另一种分支合并策略,会在当前分支上
2013-12-9
SHA-1
SHA-1
摘要长度是20 字节 如果地球上65 亿的人类都在编程,每 人每秒都在产生等价于整个Linux 内核历史 (一百万个Git 对象)的代码,并将之提交到 一个巨大的Git 仓库里面,那将花费5 年的时 间才会产生足够的对象,使其拥有50% 的概 率产生一次SHA-1 对象冲突。
大纲
Git简介 Git基础 Git操作
GIT版本管理
GIT分支管理在项目中的实践
2013-12-9
Git目录
Git一共有三个目录
工作目录(Working Directory) Ø 暂存目录(index) Ø 仓库(History)
Ø
2013-12-9
GIT文件状态切换
2013-12-9
子模块
第三方开发的库或者是你独立开发和并在多个
父项目中使用的项目作为一个子模块放入git仓 库 $ git submodule add git://github.com/chneukirchen/rack.git rack
2013-12-9
filter-branch
核弹级应用,尽可能小心使用
2013-12-9
远程仓库操作
git
clone <仓库地址> git remote –v 列出所有远程仓库 git push <仓库名> <分支名> 推送本地分支更 新到远程仓库 git fetch 从远程仓库获取更新 git pull从远程仓库获取更新并merge本地分支
2013-12-9
GIT图示
2013-12-9
GIT版本
Git版本号是一个40位的SHA-1编码的字符串 例如:
4dd6bd612a121b24e1877dbc632e422e305 dde6c 它不像svn那样版本号是连续的,很容易从版 本号看出哪个是新版本,git的版本号是不连 续的
2013-12-9
可以利用它来追踪项目中的文件 Ø 可以和合作伙伴共享版本历史状态 Ø 可以将合作伙伴的工作和你的工作进行合并 Ø 可以对整个工程或某些文件跟历史版本进行比较 或者恢复到早期的某个版本。
Ø
2013-12-9
Git简介
它的特点在于:
1.开源 Ø 2.高速 Ø 3.节省大量空间 Ø 4.灵活、简洁、高效的分支管理
Ø
它能最大限度地发挥多人协同并发编程的效能,
让分支管理更快速,版本管理更简单
2013-12-9
GIT简介-开源
• •
GIT源码地址:git-scm.com/download GIT许可证:GNU通用公共许可证(GNU General Public License)
2013-12-9
大纲
Git简介 Git基础 Git操作
review https://scm.hz.netease.com Code review流程:
代码commit之后,push的地址是code review的地 址,而不是仓库地址 Ø 提交之后,owner就会收到code review的邮件,显 示代码的改动 Ø 可以在ui上review代码,并做评注 Ø Commiter就会收到邮件,修改并重新发起code
2013-12-9
git log
$ git log commit 734713bc047d87bf7eac9674765ae793478c50d3 Author: Scott Chacon <schacon@gmail.com> Date: Fri Jan 2 18:32:33 2009 -0800 fixed refs handling, added gc auto, updated tests commit d921970aadf03b3cf0e71becdaab3147ba71cdef Merge: 1c002dd... 35cfb2b... Author: Scott Chacon <schacon@gmail.com>
2013-12-9
查看提交范围
git log master..experiemnt D C
2013-12-9
查看提交范围
git
log origin/master..HEAD
这条命令显示任何在你当前分支上而不在远程
origin 上的提交。如果你运行git push 并且的你的当前分支正在跟踪origin/master, 被git log origin/master..HEAD
少那些乱七八糟的提交弄乱git仓库 git commit -ammend 这会更改Sha-1值,不能再push之后再修改
2013-12-9
git调试
Git有个挺有用的功能,可以找出你觉得有问
题的代码在哪个版本引入的 git blame -L 32,36 xxx.java
2013-12-9
2013-12-9
Git创建时的目标
1. 2. 3.
4. 5.
速度 简单的设计 对非线性开发模式的强力支持(允许上千个 并行开发的分支) 完全分布式 有能力高效管理类似 Linux 内核一样的超大 规模项目(速度和数据量)
2013-12-9
Git简介
u
git是一个快速,开源,分布式的版本控制系 统,在开源和协作编程社区很快取代了svn。
GIT分支管理在项目中的实践
2013-12-9
创建仓库
Git
init 创建一个空仓库
git
clone git://github.com/schacon/grit.git mygrit 复制一个远程仓库到本地
2013-12-9
文件生命周期
2013-12-9
常用文件操作命令
git
2013-12-9
GIT的优势
使用GIT很大程度上解决了我们在项目中碰到
2013-12-9
占用空间小
git比较节省空间。Django项目为例。
44M ./django-git 53M ./django-svn git克隆比SVN要小很多,且git克隆包含整个项 目的历史版本。 SVN只包含项目的最后一个版本。
2013-12-9
快照
git是基于快照的,而不是补丁文件 包含一些元数据(提交信息(message),作
2013-12-9
集中化的版本控制系统
2013-12-9
集中化的版本控制系统
坏处:好处:每个人都可以在一定程度上看到
项目中的其他人正在做些什么。而管理员也可 以轻松掌控每个开发者的权限。
(1)中央服务器的单点故障,无法提交更新,也 就无法协同工作。 Ø (2)要是中央服务器的磁盘发生故障,碰巧没做 备份,会有丢失数据的风险。最坏的情况是彻底 丢失整个项目的所有历史更改记录
time git clone ssh://gufeiyong@scm.hz.netease.com:2222/backend/datastream.git >/dev/null real0m26.559s user0m2.568s sys0m1.028s time svn co https://svn.hz.netease.com/svn/datastream >/dev/null real3m14.684s user1m1.156s sys0m20.897s
顾费勇
Git代码管理艺术
2013-12-9
大纲
Git简介 Git基础 Git操作
Git版本管理
GIT分支管理在项目中的实践
2013-12-9
Git 简史
2002 年,linux项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使 用BitKeeper 的权力 April 5, 2005 – Linus发布首个git版本 June 15, 2005 - Git 用作Linux源码版本控制