git学习笔记
Git实战
听故事顺便学git,可能是全世界最好玩的git教程。
第一章 快速入门
1.1 什么是Git
Git是一个分布式的版本控制软件。
- 软件,类似于QQ、office、dota等安装到电脑上才能使用的工具。
- 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据。
- 分布式
- 文件夹拷贝
- 本地版本控制
- 集中式版本控制
- 分布式版本控制
1.2 为什么要做版本控制
要保留之前所有的版本,以便回滚和修改。
1.3 安装git
详见:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
1.4 git三大区域
- 工作区(红色区域)
- 已管理文件中的新增文件或修改文件(自动检测)
- 目的:方便写代码,方便修改,把改变的部分放这
- 暂存区(绿色区域)
- 把工作区里的文件用git add提交到暂存区
- 目的:起到一个缓冲的作用,是工作区与版本库的过度区域
- 版本库
- 把暂存区里的文件用git commit提交到版本库
- 目的:最终的每一个版本都放在这
第二章 “东北热”创业史
2.1 第一阶段:单枪匹马开始干
想要让git对一个目录进行版本控制需要以下步骤:
进入要管理的文件夹
执行初始化命令
1
git init
管理目录下的文件状态
1
2
3git status
注:新增的文件和修改过后的文件都是红色管理指定文件(红变绿)
1
2git add 文件名
git add .个人信息配置:用户名、邮箱 【一次即可】
1
2git config --global user.email "you@example.com"
git config --global user.name "Your Name"生成版本
1
git commit -m '描述信息' //单引号中主要放对版本的描述信息,如初稿,版本号等
查看版本记录
1
git log
2.2 第二阶段:拓展新功能
1 | git add |
新增了有短视频功能的版本
2.3 第三阶段:“约饭事件”
回滚至之前版本
1
2git log
git reset --hard 版本号
版本号指的是git log执行后输出的commit后面的一大串字母数字
回滚至之后版本
1
2git reflog
git reset --hard 版本号
这里的版本号是git reflog执行后输出的每一行最前面的一小串字母数字
2.4 小总结
1 | git init |
2.5 第四阶段:商城&紧急修复bug
2.5.1 分支
分支可以给使用者提供多个环境的可以,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
2.5.2 紧急修复bug方案
2.5.3 命令总结
查看分支
1
git branch
创建分支
1
git branch 分支名称
切换分支
1
git checkout 分支名称
分支合并(可能产生冲突)
1
2
3git merge 要合并的分支
注意:切换分支再合并删除分支
1
git branch -d 分支名称
2.5.4 工作流
2.6 第五阶段:进军三里屯
有钱之后就要造呀,一个人在三里屯买了一层楼做办公室。
2.6.1 第一天上班前在家上传代码
首先,需要注册github账号,并创建远程仓库,然后再执行如下命令,将代码上传到github。
1 | 1. 给远程仓库起别名 |
2.6.2 初次在公司新电脑下载代码
1 | 1. 克隆远程仓库代码 |
在公司下载完代码后,继续开发
1 | 1. 切换到dev分支进行开发 |
2.6.3 下班回到家继续写代码
1 | 1. 切换到dev分支进行开发 |
2.6.4 到公司继续开发
1 | 1. 切换到dev分支进行开发 |
开发完毕,要上线
1 | 1. 将dev分支合并到master,进行上线 |
2.6.5 在公司约妹子忘记提交代码
1 | 1. 拉代码 |
2.6.6 回家继续写代码
1 | 1. 拉代码,发现在公司写的代码忘记提交... |
2.6.7 到公司继续写代码
1 | 1. 拉代码,把晚上在家写的代码拉到本地(有合并、可能产生冲突) |
2.6.8 其他
1 | git pull origin dev |
2.6.9 rebase的作用?
rebase可以保持提交记录简洁,不分叉。
2.6.9 快速解决冲突
安装beyond compare
在git中配置
1
2
3git config --local merge.tool bc3
git config --local mergetool.path '/usr/local/bin/bcomp'
git config --local mergetool.keepBackup false应用beyond compare 解决冲突
1
git mergetool
2.7 小总结
添加远程连接(别名)
1
git remote add origin 地址
推送代码
1
git push origin dev
下载代码
1
git clone 地址
拉取代码
1
2
3
4git pull origin dev
等价于
git fetch origin dev
git merge origin/dev保持代码提交整洁(变基)
1
git rebase 分支
记录图形展示
1
git log --graph --pretty=format:"%h %s"
2.8 第六阶段:多人协同开发工作流
2.8.1 创建项目&邀请成员
协同开发时,需要所有成员都可以对同一个项目进行操作,需要邀请成员并赋予权限,否则无法开发。github支持两种创建项目的方式(供多人协同开发)。
合作者,将用户添加到仓库合作者中之后,该用户就可以向当前仓库提交代码。
组织,将成员邀请进入组织,组织下可以创建多个仓库,组织成员可以向组织下仓库提交代码。
扩展:Tag标签管理
为了能清晰的管理版本,在公司不会直接使用commit来做版本,会基于Tag来实现:v1.0 、 v1.2 、v2.0 版本。
1 | git tag -a v1.0 -m '版本介绍' 创建本地创建Tag信息 |
2.8.2 小弟开发
小弟注册Github 或 Gitlab账号
邀请小弟进入组织(默认对组织中的项目具有读权限)
邀请小弟成为某项目的合作者
小弟在自己电脑上下载代码并开发
1
2
3
4
5
6
7
8
9git clone https://github.com/oldboy-org/dbhot.git
cd dbhot
git checkout dev
git checkout -b dzz
写代码...
git add .
git commit -m '斗地主功能开发完成'
git push origin ddz
2.8.3 code review
- 配置,代码review之后才能合并到dev分支。
- 小弟提交 code review申请
- 组长做 code review
2.8.4 提测上线(预发布)
由专门团队或团队leader执行以下步骤:
基于dev分值创建release分值
1
2git checkout dev
git checkout -b release测试等
合并到master
1
2
3使用pull request
或
本地将release合并到master分支在master分支打tag
1
2git tag -a v2 -m '第二版 斗地主功能'
git push origin --tags运维人员就可以去下载代码做上线了
1
git clone -b v2 地址
2.9 第七阶段:给开源软件贡献代码
- fork源代码
将别人源代码拷贝到我自己的远程仓库。 - 在自己仓库进行修改代码
- 给源代码的作者提交 修复bug的申请(pull request)
第三章 其他
3.1 配置
项目配置文件:项目/.git/config
1
2git config --local user.name '武沛齐'
git config --local user.email 'wupeiqi@xx.com'全局配置文件: ~/.gitconfig
1
2git config --global user.name 'wupeiq'
git config --global user.name 'wupeiqi@xx.com'系统配置文件:/etc/.gitconfig
1
2
3
4git config --system user.name 'wupeiq'
git config --system user.name 'wupeiqi@xx.com'
注意:需要有root权限
应用场景:
1 | git config --local user.name '武沛齐' |
3.2 免密码登录
URL中体现
1
2
3
4
5原来的地址:https://github.com/WuPeiqi/dbhot.git
修改的地址:https://用户名:密码@github.com/WuPeiqi/dbhot.git
git remote add origin https://用户名:密码@github.com/WuPeiqi/dbhot.git
git push origin masterSSH实现
1
2
3
4
5
6
7
81. 生成公钥和私钥(默认放在 ~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥)
ssh-keygen
2. 拷贝公钥的内容,并设置到github中。
3. 在git本地中配置ssh地址
git remote add origin git@github.com:WuPeiqi/dbhot.git
4. 以后使用
git push origin mastergit自动管理凭证
3.3 git忽略文件
让Git不再管理当前目录下的某些文件。
1 | *.h |
更多参考:https://github.com/github/gitignore
3.4 github任务管理相关
- issues,文档以及任务管理。
- wiki,项目文档。
结课
感谢各位同学的关注和学习,希望git实战课程对你能够有所帮助,更多资源关注:
- 小猿圈 <www.apeland.cn>
- 路飞学城 <www.luffycity.com>
- 老男孩IT教育 <www.oldboyedu.com>