目录
序言
Git是什么?
Git:分布式 版本控制 的软件
文件版本控制的方式:文件复制--->本地版本控制--->集中式版本控制(中央服务器, 例:SVN, NAS)--->分布式
为什么要做版本控制?
- 放置线上代码出问题, 做回滚
安装git
-
安装在自己的电脑上, 只能用这个软件完成在本地的版本控制, 若要多电脑使用, 需要依赖中心(仓库: GitHub gitlab )
下载完毕后, 一直点next安装即可, 安装好后在鼠标右键菜单上会有显示
使用
大体流程
版本控制--->git管理文件夹
1. 进入要管理的文件夹, 鼠标右键选择`Git Bash Here`, 在命令框输入 初始化命令 进行初始化, 会在当前路径下创建`.git`隐藏文件夹, 该文件夹存储所有的该文件夹的版本信息及配置
get init #初始化, 让git帮助我们管理当前文件夹
输入检测当前文件状态命令 新的没有在版本中的文件会红色表示
git status #检测当前目录下文件状态
输入增加文件命令 后面是文件名称, 按tab补全.
git add readme.txt #增加一个文件
git add . #增加当前路径下的所有文件
# 红色:新增的文件/修改了原老文件 --->git add
# 绿色:git已经管理起来了, 文件未存档--->git commit -m ''
# 无色或不可见, 表示文件已被管理且创建了新版本, 文件已存档
个人信息配置:用户名、邮箱 【一次即可】
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
生成版本
git commit -m '描述信息' #生成版本
若你修改了文件, 则需要重新检测文件改动, 然后增加需要更新到git的文件或文件夹, 最后生成版本
git log #查看版本记录
回滚
若需要恢复到上一个版本, 那么则需要进行回滚
回滚至之前版本
git log
git reset --hard 版本号 #回滚
示范:
$ git log
commit 4a7ca6fb18b0a7c728a709759c1a99270f9207f3 (HEAD -> master)#这里的4a7c...就是版本号
Author: 舟清颺 <[email protected]>
Date: Sat Apr 22 17:05:13 2023 +0800
测试
Super@YU-ROG MINGW64 /c/MyDatabase/00 临时处理/临时 (master)
$
回滚之之后版本
git reflog
git reset --hard 版本号
撤销修改
git checkout --文件名称#例如对文件进行了修改, 当需要恢复之前状态时.
从暂存区回滚到工作区
git reset HEAD 文件名称
商城&紧急修复bug
分支
分支可以给使用者提供多个环境的可以,意味着你可以把你的工作从开发主线上分离开来 ,以免影响开发主线。 git的文件只保留修改的文件, 别的是通过链接的方式保存的.
紧急修复bug方案
主干线master(线上内容), dev分支(新功能分支)
当项目开发到C3时, 创建分支dev(新功能分支, 会自动将C3快照一份),
然后再C3基础上开发C4时(测试版新功能), 发现正式版C3有bug
切换为master分支, 然后创建bug分支, 切换到bug分支, 然后临时创建bug修复版C5
合并: 切换到master分支, 将bug分支C5合并到master, 没问题后删除bug分支.
继续开发: 切换到dev分支, 继续开发C6功能(但是bug还没修复, 因为是继承于C3), 切换到master分支, 将dev分支合并到master分支上
冲突: 若在合并时, 同一文件均做了不同修改, 例如C6没有修复bug但有新功能, C5修复了bug但无新功能. 系统会将C5和C6冲突文件放在一起, 等待你手动修改为唯一, 然后自己创建为C7版本
因为C5和C3指向同一个源头, 故而合并无冲突. 而C6指向C3, C5在master且比C3高级, 所以不同源, 会冲突
命令总结
-
查看分支
git branch #查看分支, 默认主分支为master
-
创建分支
git branch 分支名称 # git branch dev
-
切换分支
git checkout 分支名称 # git checkout dev
-
分支合并(可能产生冲突)
git merge 要合并的分支#这里是将要被合并分支合并到现在所在分支, 所以要切换到合并分支 git merge C5 注意:切换分支再合并
-
删除分支
git branch -d 分支名称#git branch -d bug 修复bug以后, bug分支就没用了, 可以删除了
工作流
工作的思维
至少有2个分支, 一个master, 一个dev(开发 )
GitHub
代码托管的仓库
GitHubs代码托管平台, 公共开发的免费, 私有的协同的需要租赁
gitlab是代码托管工具,可以自己搭建代码托管仓库
第五阶段:进军三里屯
有钱之后就要造呀,一个人在三里屯买了一层楼做办公室。
第一天上班前在家上传代码
首先,需要注册github账号,并创建远程仓库,然后再执行如下命令,将代码上传到github。
1. 给远程仓库起别名
git remote add origin 远程仓库地址
2. 向远程推送代码
git push -u origin 分支
初次在公司新电脑下载代码
1. 克隆远程仓库代码
git clone 远程仓库地址 (内部已实现git remote add origin 远程仓库地址)
2. 切换分支
git checkout 分支
在公司下载完代码后,继续开发
1. 切换到dev分支进行开发
git checkout dev
2. 把master分支合并到dev [仅一次]
git merge master
3. 修改代码
4. 提交代码
git add .
git commit -m 'xx'
git push origin dev
下班回到家继续写代码
1. 切换到dev分支进行开发
git checkout dev
2. 拉代码
git pull origin dev
3. 继续开发
4. 提交代码
git add .
git commit -m 'xx'
git push origin dev
到公司继续开发
1. 切换到dev分支进行开发
git checkout dev
2. 拉最新代码(不必再clone,只需要通过pull获取最新代码即可)
git pull origin dev
3. 继续开发
4. 提交代码
git add .
git commit -m 'xx'
git push origin dev
开发完毕,要上线
1. 将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master
2. 把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev
在公司约妹子忘记提交代码
1. 拉代码
git pull origin dev
2. 继续开发
3. 提交代码
git add .
git commit -m 'xx'
注:忘记push了
回家继续写代码
1. 拉代码,发现在公司写的代码忘记提交...
git pull origin dev
2. 继续开发其他功能
3. 把dev分支也推送到远程
git add .
git commit -m 'xx'
git push origin dev
到公司继续写代码
1. 拉代码,把晚上在家写的代码拉到本地(有合并、可能产生冲突)
git pull origin dev
2. 如果有冲突,手动解决冲突
3. 继续开发其他功能
4. 把dev分支也推送到远程
git add .
git commit -m 'xx'
git push origin dev
其他
git pull origin dev
等价于
git fetch origin dev
git merge origin/dev
rebase的作用?
rebase可以保持提交记录简洁,不分叉。
快速解决冲突
-
安装beyond compare
-
在git中配置
git config --local merge.tool bc3 git config --local mergetool.path '/usr/local/bin/bcomp' git config --local mergetool.keepBackup false
-
应用beyond compare 解决冲突
git mergetool
小总结
-
添加远程连接(别名)
git remote add origin 地址
-
推送代码
git push origin dev
-
下载代码
git clone 地址
-
拉取代码
git pull origin dev 等价于 git fetch origin dev git merge origin/dev
-
保持代码提交整洁(变基)
git rebase 分支
-
记录图形展示
git log --graph --pretty=format:"%h %s"
第六阶段:多人协同开发工作流
创建项目&邀请成员
协同开发时,需要所有成员都可以对同一个项目进行操作,需要邀请成员并赋予权限,否则无法开发。github支持两种创建项目的方式(供多人协同开发)。
-
合作者,将用户添加到仓库合作者中之后,该用户就可以向当前仓库提交代码。
-
组织,将成员邀请进入组织,组织下可以创建多个仓库,组织成员可以向组织下仓库提交代码。
扩展:Tag标签管理
为了能清晰的管理版本,在公司不会直接使用commit来做版本,会基于Tag来实现:v1.0 、 v1.2 、v2.0 版本。
git tag -a v1.0 -m '版本介绍' 创建本地创建Tag信息
git tag -d v1.0 删除Tag
git push origin --tags 将本地tag信息推送到远程仓库
git pull origin --tags 更新本地tag版本信息
git checkout v.10 切换tag
git clone -b v0.1 地址 指定tag下载代码
小弟开发
-
小弟注册Github 或 Gitlab账号
-
邀请小弟进入组织(默认对组织中的项目具有读权限)
-
邀请小弟成为某项目的合作者
-
小弟在自己电脑上下载代码并开发
git 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
code review
-
配置,代码review之后才能合并到dev分支。
-
小弟提交 code review申请
-
组长做 code review
提测上线(预发布)
由专门团队或团队leader执行以下步骤:
-
基于dev分值创建release分值
git checkout dev git checkout -b release
-
测试等
-
合并到master
使用pull request 或 本地将release合并到master分支
-
在master分支打tag
git tag -a v2 -m '第二版 斗地主功能' git push origin --tags
-
运维人员就可以去下载代码做上线了
git clone -b v2 地址
第七阶段:给开源软件贡献代码
- fork源代码
将别人源代码拷贝到我自己的远程仓库。 - 在自己仓库进行修改代码
- 给源代码的作者提交 修复bug的申请(pull request)
其他
配置
-
项目配置文件:项目/.git/config
git config --local user.name '武沛齐' git config --local user.email '[email protected]'
-
全局配置文件: ~/.gitconfig
git config --global user.name 'wupeiq' git config --global user.name '[email protected]'
-
系统配置文件:/etc/.gitconfig
git config --system user.name 'wupeiq' git config --system user.name '[email protected]' 注意:需要有root权限
应用场景:
git config --local user.name '武沛齐'
git config --local user.email '[email protected]'
git config --local merge.tool bc3
git config --local mergetool.path '/usr/local/bin/bcomp'
git config --local mergetool.keepBackup false
git remote add origin 地址 ,默认添加在本地配置文件中(--local)
免密码登录
-
URL中体现
原来的地址: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 master
-
SSH实现
1. 生成公钥和私钥(默认放在 ~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥) ssh-keygen 2. 拷贝公钥的内容,并设置到github中。 3. 在git本地中配置ssh地址 git remote add origin [email protected]:WuPeiqi/dbhot.git 4. 以后使用 git push origin master
-
git自动管理凭证
git忽略文件
让Git不再管理当前目录下的某些文件。
*.h
!a.h
files/
*.py[c|a|d]
更多参考:https://github.com/github/gitignore
github任务管理相关
- issues,文档以及任务管理。
- wiki,项目文档。
结课
感谢各位同学的关注和学习,希望git实战课程对你能够有所帮助,更多资源关注:
- 小猿圈 <www.apeland.cn>
- 路飞学城 <www.luffycity.com>
- 老男孩IT教育 <www.oldboyedu.com>