Download presentation
Presentation is loading. Please wait.
1
开源软件分布式版本控制器 GIT Linus的第二个伟大作品 演讲者:喻鹏
2
大纲 SVN之痛 1 GIT命令图解 2 命令&场景&实战 3 4 GIT分支管理策略
3
SVN之痛 对网络依赖极强,离开网络没法工作 提交只有一次机会,想后悔没门儿 创建分支、合并分支操作繁琐
网络太差,提交、更新和查看日志很费劲 强迫使用者及时处理冲突,然后才能提交 文件目录不能随意移动和修改 git与svn的五个区别 1、git是分布式,svn是集中式 2、GIT把内容按元数据方式存储,而SVN是按文件 3、GIT分支和SVN的分支不同 4、GIT没有一个全局的版本号,而SVN有 5、GIT的内容完整性要优于SVN git优势 ====== 由于是分布式,所有本地库包含了远程库的所有内容。 优秀的分支模型,打分支以及合并分支,机器方便。 快速,在这个时间就是金钱的时代,Git由于代码都在本地,打分支和合并分支机器快速,使用个SVN的能深刻体会到这种优势。
4
GIT命令图解
5
命令&场景&实战 场景一:第一次使用GIT 场景二:如何实现多人协同开发-解决冲突 场景三:开发到一半需要临时处理紧急任务
场景四:从历史某个版本开一个分支继续开发 场景五:将分支合并回主干(master) 场景六:编码推倒重新开发 场景七:创建一个里程碑v1.0 拓展:如何避免引入辅助目录 拓展:如何用GIT代理SVN实现移动办公
6
命令&场景&实战 场景一:第一次使用GIT 在当前目录新建一个GIT代码库 新建一个目录,将其初始化为代码库 下载一个目录和它整个代码历史
git init 新建一个目录,将其初始化为代码库 git init [项目名称] 下载一个目录和它整个代码历史 git clone [url]
7
命令&场景&实战 场景一:第一次使用GIT 基本语法:git config [选项]
[--global|--system|--local] 指定配置文件位置 查看配置文件内容 git config [--global] --list 命令行设置提交日志里我的姓名和邮箱 git config [--global] user.name “peng.yu” git config [--global] user. 在配置文件里直接修改:git config -e [--global]
8
命令&场景&实战 场景一:第一次使用GIT 克隆生成裸版本库 创建生成裸版本库 克隆版本库 拉取版本库最新代码 提交代码到远程版本库
git clone --bare /path/demo /repos/demo.git 创建生成裸版本库 git init --bare [项目名称].git 克隆版本库 git clone [项目名称] 拉取版本库最新代码 git pull 提交代码到远程版本库 git add -A git commit -m ‘第一次提交’
9
命令&场景&实战 场景二:如何多人协同开发-解决冲突 用户A对a.list文件第一行代码进行修改并提交
git add a.list git commit -m ‘第一次提交’ git push 用户B对a.list文件第一行进行修改并提交 git commit -m ‘第二次提交’ git pull 与冲突提交者一起确定要谁的代码,删除冲突标识 git add -u
10
命令&场景&实战 场景三:开发到一半突然需要处理紧急任务 保存当前工作进度 恢复工作进度 git stash
git stash list #查看所有保存进度 恢复工作进度 git stash pop #恢复上一次保存的工作进度 git stash apply #恢复某一次进度 git clear #删除所有进度
11
命令&场景&实战 场景四:从历史某个版本开一个分支并协同开发 查找所有历史,取某一版本创建分支并切换该分支
git log --pretty=oneline git checkout <commit-id> -b newbranch git push origin newbranch #将分支推送到远程版本库 拉取新的分支并切换该分支 git pull git branch -r #列出所有远程分支 git checkout origin/newbranch -b newbranch 不切换当前分支,创建新的分支(拓展) git branch --track newbranch origin/newbranch git branch newbranch <commit-id>
12
命令&场景&实战 场景五:将分支合并回主干(master) 将newbranch代码合并回主干 git checkout master
git merge newbranch 将master代码合并回分支newbranch git checkout newbranch
13
命令&场景&实战 场景六:编码推倒重新开始 检出 重置 还原 git checkout -- file #恢复暂存区指定文件到工作区
git checkout <commit-id> file #恢复某个commit的指定文件到暂存区和工作区 git checkout . #恢复暂存区的所有文件到工作区 重置 git reset [file] #重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 git reset HEAD^ #重置到某一个版本,而不覆盖工作区 还原 git revert <commit-id> #不影响历史提交,代码恢复到指定版本
14
命令&场景&实战 场景七:创建一个里程碑v1.0 git tag v1.0 #创建里程碑v1.0 git tag #查看所有里程碑
git show v1.0 #查看某个里程碑所对应的提交 git push origin v1.0 #将里程碑提交到远程版本库 git tag push origin --tags #提交所有版本库 git tag -d v1.0 #删除里程碑 git push origin :refs/tags/v1.0 #删除远程版本库v1.0 git checkout -b debugv1.0 v1.0 #以v1.0创建分支
15
命令&场景&实战 拓展:如何避免引入辅助目录 在项目根目录创建.gitignore,配置语法: 以斜杠“/”开头表示目录
以星号“*”通配多个字符 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录 例子: .gitignore 忽略git忽略文件 test/ 忽略目录及目录下的文件 /test/ 忽略根目录下test/及所有子目录、文件 !/test 始终不忽略,test目录 *.swp 忽略后缀.swp结尾的文件
16
命令&场景&实战 拓展:如何用GIT代理SVN实现移动办公 在添加svn的库 克隆svn版本库地址 命令操作
git config --add svn-remote.jhx.v1.0.url <url> git config --add svn-remote.jhx.v1.0.fetch :refs/remotes/jhx.v1.0 git svn fetch 2.2.x git checkout -b local-2.2.x -t 2.2.x git branch -r 克隆svn版本库地址 git svn clone <url> 命令操作 git svn fetch | git svn rebase | git svn dcommit
17
GIT分支管理策略 常设分支 临时性分支 操作流程 主分支master 开发分支develop 功能(feature)分支
预发布(release)分支 修补bug(fixbug)分支 操作流程 git checkout -b feature-1.0 master git checkout master git merge --no-ff feature-1.0 1、代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。Git主分支的名字,默认叫做master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。 2、主分支只用来分布重大版本,日常开发应该在另一条分支上完成。 3、功能分支它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。 4、预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。 5、修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。
18
GIT分支管理策略 操作流程 git tag -a v1.0 git checkout develop
git merge --no-ff feature-1.0 git branch -d feature-1.0 git tag
19
附录 常用GIT命令清单:
20
Thank You ! 喻鹏
Similar presentations