首页 > 其他分享 >【Git】git多分支开发 git远程仓库 ssh链接远程仓库 协同开发 冲突解决 线上分支合并 pycharm操作git 远程仓库回滚

【Git】git多分支开发 git远程仓库 ssh链接远程仓库 协同开发 冲突解决 线上分支合并 pycharm操作git 远程仓库回滚

时间:2023-03-02 19:56:09浏览次数:41  
标签:git 仓库 dev master 远程 分支

目录

昨日回顾

# 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

image-20230302090606165

给客户看主分支的代码,主分支只有实现的功能。复制代码新开一个分支用于开发,当开发分支完成需求,就将开发分支和主分支合并。

image-20230302091048724

分支操作

image-20230302091136307

星号表示在这个分支上,当前只有master这个主分支。

创建分支:

image-20230302091217842

切换分支:

image-20230302091306773

主分支还有文件没有管理。

分支删除:

image-20230302091405839

当前所在的分支,是不能删除的。要切换到别的分支再删除。

合并分支

image-20230302091652952

不在主分支开发,最后再合并到主分支。

切换分支:

image-20230302091850137

新建:

image-20230302092022899

查看:

image-20230302092048488

dev分支提交:

再新建一个文件添加点数据:

image-20230302092159169

切换回主分支:

image-20230302092321303

在dev新建的文件被隐藏到.git

合并分支:
先来到要合并进去的分支,我们这里的例子是master分支。

image-20230302092509421

合并分支:
主分支和子分支修改了同一行代码,会出现冲突。

公司:
主分支 开发分支 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,就不会被管理了

后端忽略文件:

image-20230302095839096

已经提交的文件如何忽略:

image-20230302100317656

先得让版本库中的文件被移除。

image-20230302100752342

初始化之后仓库不是空。不是空会有问题,会存在合并代码的问题。

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 仓库又不是空的了。

本地保存密码的位置:

image-20230302102426263

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

设置:

image-20230302103144173

执行:

image-20230302103339934

image-20230302103422462

一个公钥一个私钥。使用的是非对称加密。

公钥放在这里:

image-20230302103557252

ssh提交代码:

之前的oringin仓库是https的,需要把仓库的协议换成ssh。

要去找ssh地址是什么:

image-20230302103814616

第一次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:

image-20230302105140439

局部用户设置存放在.git/config:

image-20230302105657009

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
   
 
 
# 避免出现冲突
 	-你如果想少出现冲突,勤拉取代码

 
    

image-20230302112515862

低版本不能提交,只能基于主分支最新版本提交。

需要拉下来:

image-20230302112606837

不是最新:

image-20230302113136560

拉的时候由于远程和本地修改了同一句话,会出现冲突,会多出以下文本:

 -冲突的样子
    <<<<<<< HEAD
    print('lqz') 
    =======        # 上面是你的代码
    print('lqz is handsome')
    >>>>>>> 

解决冲突,删掉冲突代码,再提交。

程序冲突:

image-20230302113725400

解决冲突,选择留谁的代码,然后提交到远程服务器。

不在同一行会不会冲突?一般不会。看和进来会不会报错。

避免出现冲突:每次有人提交新版本,就拉取下来。

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 '解决冲突'
    

image-20221109101551819

配置文件很容易出现冲突。

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

image-20221109113952798

git add

image-20221109114106499

git commit

image-20221109114155394

image-20221109114331243

git push

git pull

image-20221109114643937

git branch操作

image-20221109115120455

查看git操作记录 git log

image-20221109115451627

本地代码跟版本库比较

image-20221109115602355

image-20221109115849670

image-20221109120249463

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

image-20230302122734597

提交不上是因为本地的版本不是最新。

练习

1 讲到哪写到哪
2 整理git面试题
3 整理补充


4 扩展搜索面试题:浏览器输入一个地址到请求返回,经历的过程

标签:git,仓库,dev,master,远程,分支
From: https://www.cnblogs.com/passion2021/p/17173168.html

相关文章

  • python之路 80 路飞项目、git多分支、git远程仓库、ssh方式连接远程仓库、协同开发、
    git多分支为什么要有分支可以保证,主分支的版本都是可以查看的版本我们都在开发分支开发,开发完成,合并到主分支分支操作分支查看gitbranch分支......
  • GitLab修改群组报错“路径已经被使用”
    GitLab修改群组报错“路径已经被使用” 1、问题背景在GitLab修改群组时,遇到如下报错“路径已经被使用” 2、原因分析根据报错提示信息,新建的群组路径已经被占用......
  • gitlab 启用双因子验证
    启用2AF登录测试参考文档https://docs.gitlab.com/ee/security/two_factor_authentication.html#enforce-two-factor-authentication......
  • 路飞-day5——git 多分支开发、git远程仓库、ssh方式连接远程仓库、协同开发、冲突解
    目录一、git多分支开发git分支管理分支操作公司里使用的分支方案二、git远程仓库把我们写了一部分的luffy项目上传到gitee上传项目到本地版本库上传项目到远程仓库需要被......
  • 环境变量与git的配合实现dotenv
    事由最近在开发淘宝客返利程序的后台服务时发现对接到淘宝联盟的appKey和secret是极为重要的假设这两串数字被恶意盗用轻则消耗平台你的流量,重则封号所以就需要将重要......
  • TortoiseGit 安装后不显示图标问题
    1.  【TortoiseGit 安装后不显示图标问题,亲测有效,记得注册表前面多打点空格】  TortoiseGit显示文件状态图标-独木成林-博客园(cnblogs.com)......
  • docker部署gitlab 15.9
    docker-compose.ymlversion:'3.6'services:web:image:'gitlab/gitlab-ce:15.9.1-ce.0'restart:alwayshostname:'project.example.com'contai......
  • 搭建docker本地镜像仓库
    一、本地镜像仓库:也就是私有服务器,主要用于企业内部镜像的共享,包括上传与下载二、搭建本地镜像仓库操作步骤1.本地服务器上安装dockerce,具体步骤参考https://www.cnblog......
  • git 操作指令
    git操作指令指令注释gitinit初始化仓库,当前文件夹多出.git文件夹gitinitxxx在上一级敲,指定初始化下一级的xxx文件夹gitstatus查看文件变化,在......
  • 浅析厂房仓库电气火灾的成因及对策
    陈盼安科瑞电气股份有限公司上海嘉定201801摘要: 文章分析了厂房仓库电气火灾的成因及火灾特点,并有针对性地提出了预防火灾的对策。 关键词: 厂房仓库;电气火灾;成因;预......