一、协同开发
多人合作开发一个项目---->多人公用一个远程仓库
以后台项目为例:
git init # git管理
设置忽略文件.gitignore

git add .
git commit -m '第一次提交,写完了首页功能'
远程新建一个远程仓库(空)
创建一个origin
git remote add origin git@gitee.com:xxx/xxx.git
把本地仓库代码推送到远程仓库(已经配了ssh,不需要任何认证)
git push origin master
命令加-u表示缓存,以后只需要敲 git push 代指git push origin master
----------------------------------------------以上操作可能是你领导做好了----------------------------------------------
下面操作是我们开发者做的:
克隆代码
git clone https://gitee.com/xxx/xxx.git
开发新功能,比如增加s1.py文件
git add .
git commit -m '新增了s1.py'
对开发者会有限制---->1、用户名密码 2、对仓库有写权限
git push origin master
推送到远程(在提交之前一定要先拉一下代码,保证本地版本库跟远程保持一致,是最新)
git pull origin master # 以后只要提交代码,都要拉一下,没事就拉一下,保证出现冲突概率小
git push origin master
二、线上bug分支解决方案
场景:
主功能以上线,现在服务器运行版本是v1.1
开发着新功能---->dev分支开发
忽然发现有bug---->新建一个bug分支(基于master分支建立bug分支)
- 改bug
- 把变更提交到bug分支---->测试---->合并到master---->v1.1.1
新功能开发完了---->要合并到master分支---->v1.2
dev分支和master分支合并,然而可能会有冲突,也可能没有
1.解决bug,开发新功能,不出冲突的情况
dev分支开发新功能:
git branch dev
git checkout dev # 本地建立dev分支,切换到了dev分支--远程没有
# 可以远程建立分支,同步到本地
# 本地建分支,同步到远程
git push origin dev # 把本地dev分支推到远程
# 开发新功能
vi ss1.py
git add .
git commit -m 'dev开发了用户功能'
git push origin dev # 把本地dev的更改提交到远程dev
# 继续开发新功能
vi ss1.py # 加入了一行
git add .
git commit -m 'dev开发了订单'
git push origin dev # 把本地dev的更改提交到远程dev
测试发现线上系统有bug,你领导让你去修复bug:
# 基于master建一个bug分支
git checkout master
git branch bug
git checkout bug # 切换到bug分支
vi ss2.py # 写点代码
git add .
git commit -m 'bug分支修复了'
# 本地bug合并到master
git checkout master
git merge bug # 不会出冲突
git push origin master # 把本地master推送到远程master,最新v1.11版本发布
# 切回到dev继续开发
git checkout dev
# 又增加了代码
# 把dev合并到master
git checkout master
git merge dev #不会冲突
git push origin master # 不会冲突,最新v1.2版本发布
2.解决bug,开发新功能,出冲突的情况
# 把所有分支都删除(重新演示一遍)
git branch dev
git checkout dev
vi common.py # 写入代码
git add .
git commit -m 'dev增加了common.py'
# 线上出bug
git checkout master
git branch bug
git checkout bug
vi common.py # 写入代码
git add .
git commit -m 'bug分支增加了common.py'
# 把bug更改合并到master上
git checkout master
git merge bug # 不会冲突
# 把dev分支合并到master(冲突)
git merge dev # 出冲突
# 解决冲突(该删删,该留留)
git add .
git commit -m '解决冲突'
git push origin master
示意图:
dev分支合并到master分支

基于分支的线上bug修复(开发新功能,出现bug)

三、冲突解决
1.多人在同一分支协同开发导致冲突
张三在s1.py第二行增加了一句
print(‘hello world’)
提交到远程仓库
李四在本地,没有拉代码,在s1.py第二行增加了一句
print(‘hello world’)
从远程仓库拉取代码,就会出现冲突
<<<<<<< HEAD # 开始,下面是你的代码
print('aaasdasd')
======= # 你的代码结束,下面是别人代码
print('666')
>>>>>>> 2e8da99c75814f197f7909d1cf7816adfc4ccd81 # 别人代码结束,版本号
如果冲突是同一个功能,跟同事商量,保留某一个人的
如果冲突不是同一个功能,保留俩人代码
git add .
git commit -m '解决冲突'
git pull origin master # 正常来讲不会有冲突(存在冲突问题)
git push origin master
2.分支合并导致冲突
操作见“解决bug,开发新功能,出冲突的情况”
四、线上分支合并(pr)
master分支和dev分支(本地和远端都有)
所有人在dev分支开发---->出冲突
把dev合并到master上:本地合并,提交master
在线上完成dev合并到master---->提交一个pull request(pr)
步骤:
1.本地创建dev,提交到远程
git branch dev
git checkout dev
git push origin dev
2.在common.py中加入了代码,提交到远端的dev分支
3.在线上完成分支合并


4.测试,领导要审查代码---->代码review

都通过,要合并分支(合并,扁平化:变基)

我们就只需要提交一个pr即可,后续领导做。
五、远程仓库回滚
本地恢复到最初状态:
git checkout master
git reset --hard 版本号
提交到远端(强制提交):
git push origin master -f # 一般不要用
六、使用pycharm操作git
只要是命令操作,都可以使用pycharm点点完成。
配置git(前提)

git clone


远程库配置


git add

git commit


git pull
git push



与版本库比较在提交


分支操作(切换分支、创建删除分支)

七、面试常问的几个问题
0 出现冲突了么?怎么解决的?
如果冲突是同一个功能,跟同事商量,保留某一个人的
如果冲突不是同一个功能,保留俩人代码
1 什么是变基?git rebase
扁平化合并,为了让日志更简洁
-多个记录整合成一个记录
-解决分支合并分叉问题
2 git pull和git fetch有什么区别?
git pull = git fetch(把代码拉下来)+ merge(合入操作,这里才可能有冲突)
3 你知道git工作流(gitflow)吗?
知道,但是我们公司没用,我们使用的是master-dev-bug分支方案
重点总结:
1 GIt:版本管理软件,分布式,进行版本管理,协同开发,合并代码
2 gitee,github,gitlab,git
gitee,github,gitlab :git远程仓库
3 win,macos,linux
win,macos官方下载软件,一路下一步
linux:yum install git
4 工作流程
工作区,暂存区,版本库,远程仓库
5 常用命令
git init
git status
git log
git reflog :回退,删除所有的版本都显示
git add .
git commit -m '注释'
git push origin master
git pull origin master
git clone 地址
6 忽略文件
.gitignore
7 分支管理
-主分支,dev分支,bug分支
git branch
git branch dev
git checkout dev
git branch -d dev
git merge dev
8 远程仓库
gitee,gitlab
git remote add 远程仓库(https,ssh)
-https:用户名密码
-ssh:公钥私钥
-对称加密:加密和解密用同一个秘钥
-非对称加密:加密用公钥,解密用私钥
-生成公钥私钥:家路径 .ssh
git push origin master
git pull origin master
没事多pull代码,一个功能提交一次
9 协同开发
1.大家都接入同一个远程仓库的项目
把你加成开发者,给你一个远程仓库地址
-git clone 远程地址
-基于它开发,推送到远程
本地项目骨架搭好,远端建立空仓库
2.线上bug,分支解决方案
3.冲突解决
-多人在同一分支开发
-分支合并出现冲突
4.线上分支合并(pr)
pull request
5.远程仓库回滚
6.pycharm操作git
之前所有的命令,都可以点击完成
7.面试题
git rebase:
-变基:多次提交合成一次
-避免分支合并的分差
gitflow:git 工作流,一种分支方案
git pull 和git fetch的区别
8.为开源软件贡献代码
-在开源代码点fork---》你的仓库就会有这个代码
-写代码,改bug,加功能
-提交pull request
本文介绍了如何使用Git进行协同开发,包括设置远程仓库、克隆代码、处理冲突、线上bug分支解决方案、PR合并以及使用PyCharm操作Git。详细讲解了在遇到冲突时的解决策略,并探讨了Git的常用命令与工作流程。
501

被折叠的 条评论
为什么被折叠?



