git
一个工作中的场景 周一定档任务, 需要完成 1 2 3 周二 改变计划, 需要在原有的基础上 添加 4 5 6 周三 改变计划, 任务 6 目前无法完成, 所以需要完成 1 2 3 4 5 周四 改变计划, 任务 4 有一定的安全风险, 所以需要完成 1 2 3 5 周五 按时提交 1 2 3 5, 本周任务完成 周五晚上 12 点, 老板紧急修改任务为 1 2 3, 需要将 任务 5 删除
假定上边的不是代码, 而是需要书写的一个作文
- 员工 A, 每次在修改计划的时候 都是在原有的文件上修改的
- 等于最后提交的 1 2 3 5, 如果需要修改为 1 2 3, 那么需要找到对应的 5 然后删除
- 员工 B, 每次修改任务的时候, 都是手动复制出来一个备份文件
- 等到最后提交的时候, 员工 B 有很多个版本的文件
- 1 2 3 版本
- 1 2 3 4 5 6 版本
- 1 2 3 4 5 版本
- 1 2 3 5 版本
- 周五提交的时候, 选择最后的一个 1 2 3 5 版本提交
- 临时通知需要修改 1 2 3 的时候, 因为这个员工做了文件的缓存, 所以只需要找到对应的版本文件, 提交即可
- 上述的故事主要表达 工作的任务会实时的变化, 然后如果代码让人去负责, 那么可能会出错, 并且不好维护
- 所以目前我们都会选择一些专业的代码托管平台, 去维护管理我们的项目
代码托管平台
-
github
https://github.com/: 全球最大的代码托管平台, 但是服务器在国外, 国内的开发者访问的时候不太方便, 比较卡顿 -
gitlab
https://about.gitlab.com/: 也是一个比较出名的代码托管平台, 但是是企业级, 一般我们去公司之后, 会使用, 自己个人不会使用 -
gitee
https://gitee.com/: 服务器在国内的一个代码托管平台, 然后我们目前在学习中, 只会使用这个平台 -
上边三个都是一个平台而已, 你可以理解为一个 腾讯相册, 至于上传什么图片(你的代码 code), 取决于你自己
-
上传方式我们统一都是依赖于 git
创建仓库
-
登录 gitee
-
在首页的右上角有一个 加号按钮, 移入之后弹出一个新的界面, 内部会有一个新建仓库的选项, 单击确认
-
进入到新建仓库页面后
- 仓库名称和路径必须书写 (名称写完会自动补全路径, 一般不需要修改路径)
- 仓库介绍 可写可不写
- 设置是否开源 (默认是开源的)
- 初始化仓库/设置模板/选择分支模型 都不需要处理
-
此时仓库已经创建完毕
-
配置 git 全局设置
git config --global user.name "xxxgd" git config --global user.email "dguangda@163.com" -
创建 git 仓库
mkdir 2310_code // 创建一个 2310_code 的文件夹 cd 2310_code // 终端路径进入到 2310_code 的文件夹 git init // 初始化一个 git 仓库 touch README.md // 创建一个 md 文件 将 一个文件 提价到了远程仓库 git add README.md git commit -m "first commit" git remote add origin https://gitee.com/ding-guangda/2310_code.git git push -u origin "master"// 我们实际需要执行指令
- git init 创建一个 git 仓库
- git add . 追踪所有的文件
- git commit -m "初始化仓库" 为 刚才追踪的文件 提交一个备注信息
- git remote add origin gitee.com/ding-guangd… 为当前的本地仓库配置一个远程仓库地址
- git push -u origin "master" 将本地仓库中的文件
// 上边是第一次要执行的命令, 后续我们如果修改了文件, 需要重新上传
1. git add . 2. git commit -m '备注信息' 3. git push
推荐的 git 插件 GitLens
新员工入职公司之后的流程
- 确保当前电脑已经安装过 git; (同时最好检测一下 node)
- 检测指令:
git --version - 官方安装地址:
https://git-scm.com/download/win
- 检测指令:
- 问同事要 远程仓库的地址:
https://gitee.com/ding-guangda/2310_code - 进入到仓库地址的页面中, 找到中间的一个 克隆/下载 的图标,
- 鼠标点击之后会有一个弹窗, 弹窗内有一个 下载 zip 和一个复制按钮
- 一般程序员不会下载 zip, 会选择直接复制
- 在桌面或者你要将项目下载安装到文件夹 内右键, 选择 git bash
- 在 打开的终端中输入一个指令: git clone 刚才复制的地址(在git中复制=
shift + ins)
员工到公司开发的流程
- git pull 确保自己本地仓库的代码是最新的, 所以拉取远程仓库最新的代码
- 开始编写我们今天的代码
- 每完成一个功能, 或者修复一个 模块, 就执行一次 add 和 commit
- 等到今天最后一个任务完成(要准备下班了), 执行一次 完整的 add/commit/push
查询 提交记录
- git log
- 如果提交次数较多, 终端可能展示不全, 需要按回车继续展示新内容
- 如果需要退出, 可以按下 :q
git 版本回退
- git reset commitID:
git reset 795380fb5e - 修改后重新提交,git push 后可能报错,需要git pull
处理开发冲突
- 冲突是什么?
- 其实就是两个人, 同时在两台电脑上编写了同一个项目同一个文件中同一行的内容
利用分支模拟一个开发冲突
- 什么是分支
- 正常在开发的时候, 我们的项目默认在 master 分支
- 然后项目会拉出来一个 dev 分支, 所有的开发者的代码, 在经过测试之前, 全部上传到 当前分支, 不上传到 master
- 但是一般开发者比较多的情况(比如三个以上), 会每个人再单独拉一个自己名字的分支, 当前分支只会存储自己的代码
- 如何创建并切换到一个分支:
git checkout -b 分支名
模拟流程
-
切换分支到 user_a
-
修改 xyj.md 的 第七行
git add . git commit -m "user_a 产生的修改" git push --set-upstream origin user_a -
切换分支回到 master :
git checkout 分支名 -
切换分支到 user_b:
git checkout -b user_b -
推送 user_b 的修改内容
git add . git commit -m 'user_b 的修改' git push --set-upstream origin user_b -
此时我们的隐患已经基本成型
-
切换到 master 分支
-
合并 user_a 的代码到 master 分支:
git merge 要合并过来的分支名 -
合并之后, 只是在本地将两个分支的代码合并, 远程仓库并没有收到影响
- 如果需要将远程仓库的代码也修改, 直接执行:
git push
- 如果需要将远程仓库的代码也修改, 直接执行:
-
合并完成 user_a 的代码后, 在合并 user_b 的代码, 到 master 分支
git merge 要合并过来的分支名 -
合并 user_b 的代码到 master 的时候, 必然会遇到一个冲突, 此时只需要考虑留下哪一个就行了
-
解决完成后, 将代码推送到远程
git add . git commit -m '解决XXX冲突' git push