目录
- 昨日回顾
- 1 git多分支开发
- 2 git远程仓库
- 3 ssh链接远程仓库,协同开发
- 4 协同开发
- 5 冲突解决
- 6 线上分支合并(pr,mr)
- 7 pycharm操作git
- 8 为开源项目贡献代码
- 9 git面试题
- 10 登录注册功能设计
- 11 补充
- 练习
昨日回顾
# 1 git:版本管理,代码管理的软件,安装
# 2 git,github,gitee,gitlab,。。。。
# 3 git工作流程:工作区,暂存区,版本库
-git init
-git status # 绿的和红色和白色
-git add 文件名
-git commit -m '注释'
-git reset --hard 版本号
-git log
-git reflog
# 4 git忽略问题
-仓库根目录 .gitignore
-配置目录 目录名
-配置文件 文件名
-配置根目录下的某个文件或文件名 /xx /xx.txt
-模糊匹配 /*a*
-问题:
-最开始没有忽略,提交到版本库管理了,再写忽略,它也会被管理
-一定保证版本库中没有这个文件,再写忽略
# 5 分支:多分支开发
-master,dev,bug
-创建分支:git branch dev
-切换分支:git checkout dev
-删除分支:git branch -d dev
-合并分支:git merge dev # 可能有冲突
-查看分支:git branch
# 6 远程仓库
-本地使用,只能做版本管理,无法协同开发
-把代码都提交到远程仓库:github,gitee,gitlab。。。。
-gitee 注册,新建仓库,空的
-把本地仓库代码提交到远程仓库
-git init
-git add .
-git commit -m '注释'
-git remote add origin 远程地址(https,ssh)
-git pull origin master
-git push origin master
# 7 ssh的配置
-先生成公钥私钥
-公钥配置再我们【账号】的ssh配置中,本地有私钥,可以安全通信
-删除原来的origin的远程关联关系
-增加成ssh的
# 8 路飞项目提交到远程仓库
'''
svn没有远程服务器无法工作。git可以在本地工作。svn本地没有版本库,git本地有版本库
.git文件存放着所有版本信息
'''
1 git多分支开发
# 为什么要有分支
-可以保证,主分支的版本都是可以查看的版本
-我们都在开发分支开发,开发完成,合并到主分支
# 分支操作
-查看分支:
git branch # * 和绿色表示你当前所在的分支,查看本地分支
-创建
-git branch dev
-切换分支
- git checkout dev
-删除分支
-git branch -d dev # 在其他分支上才能删它
-合并分支:【可能会有冲突】
- 要把dev合并到master上
- 先来到master分支:git branch checkout master
- 执行合并命令:git merge dev # 把dev合并到我(master)身上
# 分支合并可能会出冲突
-查看远程分支:【后面会讲】
git branch -a
给客户看主分支的代码,主分支只有实现的功能。复制代码新开一个分支用于开发,当开发分支完成需求,就将开发分支和主分支合并。
分支操作
星号表示在这个分支上,当前只有master这个主分支。
创建分支:
切换分支:
主分支还有文件没有管理。
分支删除:
当前所在的分支,是不能删除的。要切换到别的分支再删除。
合并分支
不在主分支开发,最后再合并到主分支。
切换分支:
新建:
查看:
dev分支提交:
再新建一个文件添加点数据:
切换回主分支:
在dev新建的文件被隐藏到.git
合并分支:
先来到要合并进去的分支,我们这里的例子是master分支。
合并分支:
主分支和子分支修改了同一行代码,会出现冲突。
公司:
主分支 开发分支 bug分支
每个人拉一个 个人分支(相当于复制一份代码) --合并-> dev分支
谁提交的慢就会出冲突。
2 git远程仓库
# 把本地的版本提交到远程仓库
# gitee,github,gitlab。。。。
# gitlab的搭建过程:https://zhuanlan.zhihu.com/p/413217715
# 讲课以 gitee作为远程仓库
# luffy_api 写好了一部分功能,要把代码提交到远程仓库
# 操作步骤:
本地:
1 在luffy_api 敲git init
2 设置忽略文件(.gitignore)
3 git add .
4 git commit -m '第一次提交'
------提交到了本地版本库-------被版本管理了
远程:
1 远程要创建仓库:gitee上创建仓库,右上角 +
2 填一些信息,保证仓库是空的
本地:
1 安装远端提示的步骤操作
2 设置用户和邮箱
3 咱们是已有仓库
cd luffy_api
# 添加一个远程仓库地址名字叫origin,地址是xxx
git remote add origin https://gitee.com/liuqingzheng/luffy_api.git
# 把本地的版本库推送到远程仓库
# 把本地当前所在分支,推送到 origin对应的远程的master上git
git push origin master
# 需要输入用户名密码,输入一次,以后就不用输入了(本地保存了:凭据管理)
# 如果提交了,再写忽略文件的步骤
luffy.log--->暂存区---》版本库
.gitignore---》写上忽略,但是不好被忽略,只要luffy.log有变化还是会被监控到
删除luffy.log---》会被监控到---》add,commit---》版本库中已经没有luffy.log
再出的luffy.log,就不会被管理了
后端忽略文件:
已经提交的文件如何忽略:
先得让版本库中的文件被移除。
初始化之后仓库不是空。不是空会有问题,会存在合并代码的问题。
2.1 把路飞项目传到远程仓库(非空的)
# 1 创建远程仓库luffy_api---【非空】
# 2 git clone https://gitee.com/liuqingzheng/luffy_api.git # 把远程仓库内容克隆到本地
# 3 把我们项目的代码,copy到 luffy_api这个文件夹下(.git文件夹不要copy)
# 4 git add .
# 5 git commit -m ‘初始化仓库’
# 6 git push origin master
# 以后,完成了项目的某个功能就要执行下面的命令,以后你在公司中得开发提交步骤
-git add .
-git commit -m '完成了xx功能,修改了xx文件。。。。' # 提交到了本地仓库
-每次提交【推到远端】代码之前,要拉取一下代码---》没事你就拉去一下,保证本地的版本库一直跟远端保存一样----以后冲突会变少
-git pull origin master
-git push origin master # 把本地的mater分支推送到远端origin对应的地址-【可能推不上去】
-如果推不上去,说明本地不是最新版本,一定下拉去一下,成了最新版本再去提交
开源协议规范:
linux改了之后可以商用,但是你也必须开源。必须在显著位置写使用了哪个开源协议。
选了设置模板 仓库也不是空的了。
选了初始化readme 仓库又不是空的了。
本地保存密码的位置:
3 ssh链接远程仓库,协同开发
# 本地仓库和远程仓库建立关系时,建立的是https的链接,公司一般用ssh的链接
# https和ssh的区别
-https:输入用户名密码,保存在凭据管理中
-ssh:配置公钥私钥
-生成公钥私钥
-把公钥放到gitee上
-配好远程仓库,以后直接提交,不需要输入任何秘钥的东西
# ssh的配置步骤
-按照这个步骤操作:https://gitee.com/help/articles/4181
-cmd命令行中,一路回车,会在【C:\Users\oldboy\.ssh】文件夹下生成公钥和私钥
ssh-keygen -t ed25519 -C "[email protected]"
-生成一个公钥,一个私钥
id_ed25519 #私钥,千万不能泄露
id_ed25519.pub #公钥,可以给任何人
-把公钥配置在gitee的配置文件中
-到此,你的机器和gitee互相上传下载代码,都不要认证了
# 以后使用:免密了
-先删除origin 对应的https的链接:git remote remove origin
-查看一下,没有了:git remote
-配置成ssh的地址
git remote add origin [email protected]:liuqingzheng/luffy_api.git
-以后直接拉去,提交代码即可
git pull origin master
git push origin master
设置:
执行:
一个公钥一个私钥。使用的是非对称加密。
公钥放在这里:
ssh提交代码:
之前的oringin仓库是https的,需要把仓库的协议换成ssh。
要去找ssh地址是什么:
第一次ssh连接需要敲一个yes。
4 协同开发
# 我[仓库管理员]创建了仓库,我对仓库有各种权限
# 我们要多人开发(张三,李四),张三李四在自己的仓库中,能看到我的项目吗?看不到
# 我[仓库管理员],把张三李四设置为该仓库的开发者,设置完成后,在张三李四的仓库中就能看到这个项目了
# 仓库管理员,邀请开发者进入
-邀请的开发者,对这个仓库就有读写权限,他们就可以开发代码,提交
# 我作为开发者,本地没有代码
1 把代码从远程仓库 clone 下来
git clone [email protected]:liuqingzheng/luffy_api.git
2 使用pycharm打开,配置好解释器,安装依赖
3 开发代码,开发完
git add
# 设置用户名和邮箱
git config user.name lqz
git config user.email [email protected]
git commit
git push origin master
# 你刚去公司,你的步骤
1 自己注册,hr给你 gitlab 账号和密码
-自己去你的账号里,配置ssh
2 老大会把一个仓库地址给你 【它已经把你加成开发者了】 https ssh
3 clone下来代码
4 使用pycharnm打开,配置环境===》代码运行起来
5 开发代码,本地提交---》push到远端
add
commit
push
git gui here:
局部用户设置存放在.git/config:
5 冲突解决
5.1 多人同一分支开发出现冲突
# 出现冲突的原因
1 多人在同一分支开发
2 分之合并出现冲突
# 多人在同一分支开发冲突
-张三:
git pull origin master
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git push origin master
-我:
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git pull origin master
# 冲突了
# 解决冲突 冲突的 箭头去掉,阅读代码,选择保留或删除别人或自己的代码,再提交
# 提交到远程仓库,这是解决后的
# 冲突出现的样子:你如果要删除别人的代码,你需要跟别人说一声
<<<<<<< HEAD 我的代码
print('刘亦菲')
======= 它的代码
print('彭于晏')
>>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5
# 避免出现冲突
-你如果想少出现冲突,勤拉取代码
低版本不能提交,只能基于主分支最新版本提交。
需要拉下来:
不是最新:
拉的时候由于远程和本地修改了同一句话,会出现冲突,会多出以下文本:
-冲突的样子
<<<<<<< HEAD
print('lqz')
======= # 上面是你的代码
print('lqz is handsome')
>>>>>>>
解决冲突,删掉冲突代码,再提交。
程序冲突:
解决冲突,选择留谁的代码,然后提交到远程服务器。
不在同一行会不会冲突?一般不会。看和进来会不会报错。
避免出现冲突:每次有人提交新版本,就拉取下来。
5.2 分支合并出现冲突
# 1 新建本地dev分支,切换过去
git branch dev
git checkout dev
# 2 dev分支修改dev.py 第一行,提交到版本库
# 在第一行加入print
git add .
git commit -m '修改了dev.py'
# 3 修改dev分支的home/views.py 最后一行
# 在views.py最后一行加入注释
git add .
git commit -m '最后一行加入注释'
# 4 切回到master分支,修改dev.py 第一行和home/views.py 最后一行,提交到版本库
git checkout master
# 在第一行加入print
# 在views.py最后一行加入注释
git add .
git commit -m 'master修改内容'
# 5 当合并代码,会出冲突,解决,提交
git merge dev
# 有冲突,解决
git add .
git commit -m '解决冲突'
配置文件很容易出现冲突。
6 线上分支合并(pr,mr)
# 之前全是线下分支操作,本地增删查改分支
# 1 远程建立分支:gitee上点击操作
# 2 把远程分支拉到本地
git pull origin dev # 已经拉下来了,但是还看不到,需要切换过去
git checkout dev # 来到了本地dev分支
# 3 本地dev分支增加代码
git add .
git commit -m '本地dev提交'
# 4 本地dev提交到远端
git push origin dev
# 5远程分支合并:把dev合并到master
-你提交pull request 的申请(pr,mr)---》跟你没关系了--->[合进去了,没有合进去]
-你领导就能看到这个pr,审核通过,点合并
-到此 dev分支就合并进master分支了
7 pycharm操作git
# 命令操作git,编辑器pycharm,可以操作git,图形化界面操作
# 以前使用的所有命令,都可以在pycharm中点点点实现
clone
git add
git commit
git push
git pull
git branch操作
查看git操作记录 git log
本地代码跟版本库比较
8 为开源项目贡献代码
# 为开源项目贡献代码
1 看到开源项目,点fork,你的仓库就有这个开源项目了
2 在本地拉去【你仓库】fork的代码
3 你继续写,提交到自己远程仓库
4 提交pr合并,如果作者同意,你就可以合并进去了
9 git面试题
1 你们公司分支方案是什么样的?
-master,dev,bug 三条分支
-master主要用来发布版本,写好了某个版本的代码合并进去,不直接在master上开发
-dev:开发分支,项目的开发者,都在dev分支上开发
-bug:bug分支,用来修改bug,发布小版本
2 使用git开发,遇到过冲突吗?
-遇到过
-多人在dev分支开发,出现的冲突
-分支合并出现的冲突
-把代码拉下来,直接解决冲突,保留我的代码,保留同事的代码
3 你知道git 变基?
-分支合并:dev分支合并到master分支
-merge或rebase 合并
-把多次提交合并成一个
4 git pull 和git fetch的区别
-pull 和 fetch都是拉取代码
-pull=fetch+合并
5 你知道git flow吗?git 工作流,它是一个别人提出的分支方案
我们没有用,我们用的就是master+dev+bug分支方案
6 使用git 的操作流程
- 如果是普通开发者:git clone下来,写代码,git add ., git commit, git pull, git push
7 什么是gitee,github:pr,gitlab:mr?
-不同叫法:提交分支合并的请求
10 登录注册功能设计
# 后端接口
1 账号/手机号/邮箱+密码登录接口
2 手机号+验证码登录接口
3 发送手机验证码接口 (第三方发送短信)
4 注册接口--》手机号,验证码,密码
5 判断手机号是否存在接口
11 补充
1 cgi fastcig WSGI uwsgi uWSGI
# cgi:通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。
一句话总结: 一个标准,定义了客户端服务器之间如何传数据
# fastcig:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本
一句话总结: CGI的升级版
常用的fastcgi软件:
Apache HTTP Server (部分) :LAMP LNMP
Nginx(主流):nginx是一个符合fastcgi协议的软件,处于浏览器和web程序之间,主要做请求转发和负载均衡,也可以称之为服务器中间件
Microsoft IIS:windows server
# WSGI:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口
一句话总结: 为Python定义的web服务器和web框架之间的接口标准
wsgiref:性能很低,python实现的,django内置了,测试阶段用,上线不用
uWSIG:性能高,c实现的
gunicorn:python实现的
# uWSGI: 符合wsgi协议的web服务器,上面标准的具体实现
# uwsgi:uWSGI服务器,自有协议
3 Apache
-Apache 公司
-Apache web服务器
-Apache 开源协议
-Kafka :apache顶级开源项目
-echars:原来是百度开发的,交给了apache孵化
远程仓库回滚
# 你不要用
# 想远程的代码,是最初的状态
# 步骤:
1 本地版本回退
git reset --hard 版本号
2 强行推到远端
git push origin master -f
提交不上是因为本地的版本不是最新。
练习
1 讲到哪写到哪
2 整理git面试题
3 整理补充
4 扩展搜索面试题:浏览器输入一个地址到请求返回,经历的过程
标签:git,仓库,dev,master,远程,分支
From: https://www.cnblogs.com/passion2021/p/17173168.html