ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

git操作

2022-07-31 14:35:00  阅读:105  来源: 互联网

标签:git 代码 dev 文件夹 提交 操作 分支


补充

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 (部分)
            Nginx(主流):nginx是一个符合fastcgi协议的软件,处于浏览器和web程序之间,主要做请求转发和负载均衡,也可以称之为服务器中间件
            Microsoft IIS
            
   # WSGI:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口
	一句话总结: 为Python定义的web服务器和web框架之间的接口标准
    wsgiref:性能很低,python实现的,djgno内置了,测试阶段用,上线不用
    uWSIG:性能高,c实现的
    gunicorn:python实现的
    
  # uWSGI: 符合wsgi协议的web服务器,上面标准的具体实现

  # uwsgi:uWSGI服务器,自有协议
    
    
2 接口幂等性
	-幂等性:多次操作的效果跟一次操作是一样的
    -多次调用接口,跟调用一次效果一样
    -哪些接口天然就是幂等性的?
    	-get
        -put
        -delete
	-post新增数据,不是接口幂等的,对不符合幂等性的接口,进行处理
    -如何解决:
    	-方式一:通过唯一字段解决,像注册接口,让用户名唯一
        -方式二:前端点击以后,按钮失效,只能点一次
        -方式三:(主流)token机制
        1、哪些接口存在幂等问题的,就必须在执行业务前,先去获取token,服务器会把token保存到redis中。
        2、然后调用业务接口请求时,把token携带过去,一般放在请求头部。
        3、服务器判断token是否存在redis中,存在表示第一次请求,然后删除token,继续执行业务。
        4、如果判断token不存在redis中,就表示是重复操作,直接返回重复标记给client,这样就保证了业务代码,不被重复执行

3 Apache
	-Apache 公司
    -Apache  web服务器
    -Apache  开源协议
    	-Kafka :apache顶级开源项目
        -echars:原来是百度开发的,交给了apache孵化

4 中间件
	-介于a和b之间的东西都称之为中间件
        -服务器中间件:nginx,apache
        -数据库中间件:介于应用程序和数据库之前的, MyCat
        -消息队列中间件:kafka,rabbitmq,Rocketmq
     
        

5 git介绍和安装

# 多人,个人开发程序,需要解决的问题
	1 帮助开发者合并开发的代码
	2 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
    3 做版本管理,找回很久以前写的代码

# 可以做版本管理和合并代码的软件
	软件:SVN 、 GIT
#名词解释
	git,gitee,github,gitlab
    # git 是版本管理软件,可以装在不同操作系统平台,主要用来做版本管理
    # github:全球最大的开源软件仓库(私有软件,花钱,国内公司一般不放在github) 
    # gitee:码云 中国版的github(少量公司用码云)
    # gitlab:公司内部使用的代码托管平台
    
# svn和git		
	git:集群化,有没有客户端,git都可以使用
    svn是客户端---》服务端架构
    
    
    
# git 的安装
	-linux:centos
    	yum install git -y
    -mac 下:
    	-https://github.com/timcharper/git_osx_installer/releases
    	下载软件,下一步安装
 
    -win下
    	-https://git-scm.com/download/win
    	下载软件,下一步安装

1 git和svn比较

# svn :集中式管理,cs架构,客户端需要配合服务端才能正常使用功能
# git:分布式管理,单台机器就能进行版本管理

img

img

2 git工作流程

未命名文件 (1)

# 有三个区
	-工作区:代码,文件存放的位置,新增,修改,删除文件,代码
    -暂存区:把工作区的更改提交到暂存区
    -版本库:把暂存区的数据,提交到版本库
    
    
# 工作流程
	-在工作区修改代码,提交到暂存区,暂存区再提交到版本库,代码才被版本管理,可以回退
    -各个区域可以相互操作,但工作区不能直接提交到版本库

3 git常用命令

# 操作步骤
# 1 创建文件夹 lqz
# 2 初始化仓库(文件夹中)---》出现 .git 隐藏文件夹
  git init 仓库名  # 在当前文件夹再创建一个文件夹作为仓库
  git init        #当前文件夹就是仓库,就会被管理

# 3 在当前文件夹下创建文件 s1.py

# 4 在命令窗口下敲---》查看当前仓库状态---》只要有红色,说明工作区更改了,但是没有提交到暂存区
 git status(重点)
    
# 5 把工作区变更提交到暂存区
git add . (重点)  # .表示当前路径下所有更改,如果你只想提交某个文件 
# 6 git status ---》变绿色---》暂存区的代码没有提交到版本库

# 7 把暂存区所有内容提交到版本库
 git commit -m '注释内容'
 发现提交不了,需要设置用户

# 8 设置用户
  # 设置全局用户---》所有仓库都用这个用户---》用户家路径C:\Users\oldboy\.gitconfig中写入了
  git config --global user.email "306334678@qq.com"
  git config --global user.name "liuqingzheng"
  # 设置局部用户---》当前仓库---》在.git文件夹下
  git config  user.email "3@qq.com"
  git config  user.name "lqz"


# 9 把暂存区代码提交到版本库
 git commit -m '注释内容'(重点)
# 10 git status ---》没有颜色

# 11 查看版本管理信息---
	git log    --》显示谁在什么时间提交的,版本号是多少
    git reflog ---》简略显示版本信息

# 12 把工作区回退到某个版本
	git reset  --hard  版本号(重点)
    
# 13 由绿变红(把暂存区拉回到工作区)
	git reset HEAD (一般不做)
    
# 14 把当前工作区的更改(不包含新增,包含修改和删除),回退回去
	git checkout .

4 git 过滤文件

# 在仓库目录下,新建一个 .gitignore  文件,文件中写 目录或者文件或者模糊匹配---》它可以完成对这些文件的忽略
# 项目的日志文件,生成的编译文件,前端项目的node_models文件夹都不需要被版本管理
# 写忽略文件可以完成这个事

""" 过滤文件内容
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤  
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤

eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
"""


## git 不管理空文件夹,文件夹下有文件,才会被管理

5 git多分支开发

# 什么是多分支
	git分支的概念 可以认为分支就是当前工作目录中代码的一份副本。 使用分支,可以让我们从开发主线上分离出来,以免影响开发主线
# 分支操作
	-创建分支
    	git branch 分支名
    -切换分支
    	git checkout dev
    -查看分支
    	git  branch
    -删除分支
    	git branch -d 分支名字
    -合并分支
    	git merge dev  # 切换到要合并进的分支(master) ,把dev合并到master上
    
    
    
# 不同分支的操作,是相互独立的


# 分支合并可能会出冲突


# 面试题:你们公司git是如何分支,如何分支管理的
	-我们公司,项目不大,基本就用三条分支 master主分支,dev开发分支,bug分支
    -我们在dev分支上协同开发,如果出现bug,从主分支现拉出bug分支修改,修改后合并进主分支

6 git远程仓库

# 上面都是在本地操作,做代码管理,咱们需要协同开发,把多人的代码合并到一起,需要有一个远程仓库,搭建都把代码提交到远程仓库,远程仓库帮我们做合并
# github,gitee,gitlab 都是远程仓库


#  创建完远程仓库后,我们的操作
	-本地没有代码
    	git init
        git add .
        git commit -m 'sss'
        git remote add origin https://gitee.com/liuqingzheng/luffyapi.git
        git push origin master
    -本地有代码(luffyapi写了一部分功能了)
    	git remote   #查看有哪些远程仓库
        git  remote remove 名字 # 删除远程仓库的关联
    	# 创建一个远程仓库的关联
    	git remote add origin https://gitee.com/liuqingzheng/luffyapi.git
         # 把本地代码提交到远程仓库  把本地master分支提交到远端的origin上
        # 输入gitee的用户名密码
	    git push origin master

7 ssh链接远程仓库,协同开发

# https的链接方式:输入用户名和密码,输入一次就被保存了

# ssh的链接,不需要用户名密码,需要公钥和私钥
	第一步:生成地址参照地址:https://gitee.com/help/articles/4181#article-header0
    第二步:在命令行中执行
		ssh-keygen -t rsa -C "306334678@qq.com"
    第三步:会在当前路径下生成公钥私钥
		/c/Users/oldboy/.ssh/
        id_rsa  :私钥  不能泄露
        id_rsa.pub:公钥 可以给别人,配置到git远程仓库
	第四步:公钥配置到gitee账户上
    第五步:以后就不需要使用用户名密码,就可以直接操作gitee了,走的是ssh链接,而不是https链接
    第六步:删除原来配置的https的origin
    	git remote remove origin
     第七步:加入ssh的origin
    	git remote add origin git@gitee.com:liuqingzheng/luffyapi.git

            
            
  # 注意,在公司里,在设置用户邮箱和名字的时候,要设置自己真正的邮箱(注册gitee,gitlab的邮箱)

7.2 协同开发

# 步骤
	-第一步:你到公司(gitee,gitlab),注册账号
    -第二步:把你的公钥配置在你的gitee,gitlab账号上
    -第三步:把你的邮箱发给项目的管理者(你老大)
    -第四步:他把你账号添加为开发者---》你就可以读写项目了
    -第五步:你要把公司项目拉到本地
    	-方式一:直接下载zip
        -方式二:在命令行中执行
        git clone git@gitee.com:liuqingzheng/luffyapi.git
    -第六步:改代码,提交 (ssh,https提交)
    	git add .
        git commit -m '注释'
        #在提交之前一定要拉一下代码
        git pull origin master  # 可能会有冲突
        git push origin master
            
            
            
            
 # 冲突出现的原因:
	-分支合并
    -多人在同一分支开发

8 冲突解决

8.1 多人同一分支开发出现冲突

# 多人在同一分支开发出现冲突


# 冲突出现的样子
print('lqz')
<<<<<<< HEAD
=======
print('sss')
>>>>>>> 732f1921741fa4d6153d1c4b7eb0302a509838d9

先把冲突的地方删除,剩下的代码分析,需要留哪些,到底是留我的代码,还是留同事的代码(删同事的,跟同事说一声),如果删自己的,不用说

8.2 分支合并出现冲突

操作流程
	git branch dev
    git checkout dev
    在代码中增加一行
    git add .
    git commit -m '提交了'
    
    
     git checkout master  #加的一行看不到
    在代码中增加同一行
    git add .
    git commit -m '提交了'
    
    # 把dev合并到master中
    git merge dev  #冲突了
    #解决冲突
    git add .
    git commit -m '提交了'

9 线上分支合并

######### 每次提交代码之前都要先拉一下######

#公司里叫提交 pr
# 操作步骤
	在远端新建dev分支
    在本地新建dev分支,切换到dev分支
    执行git pull origin dev  #把远端的dev拉倒本地的dev
    修改代码
    git add .
    git commit -m '注释'
    git pull origin dev # 先拉
    git push origin dev  # 把本地当前在分支(dev)推到远端dev
    远端的master和dev代码就不一样了
    远端合并代码
    提交pr
    你领导审核,审核过后,通过,就合并了

10 pycharm操作git

# pycharm 其实可以作为git的图形化客户端



# 如果你是软件的开发者
	-git clone xx

克隆代码

git clone xx

git add

git add .

git commit

git commit -m xx

git pull 和git push

git pull 类似于 git fetch+git merge

查看本地和远端所有分支

11 为开源项目贡献代码

# 第一步:先fork开源项目---》在你仓库中就能看到这个项目了(复制了一份到你仓库)
# 第二步:从自己仓库,clone到本地
# 第三步:写代码,提交到本地,推到远端
# 第四步:提交远程分支合并请求(pr)--->作者收到你的pr,读你代码,觉得OK,同意,同意就合进去了

12 git 变基和git fetch

# git rebase
	-咱们正常合并代码使用git merge合并
    -通过变基合并代码,可以让提交记录更简洁
    -解决分支合并分叉问题
    
    
# git fetch用过吗?干什么用的
	git pull 和git fetch	
	相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
    不同点git pull 类似于 git fetch+git merge

    
    
# git flow


# git 面试题
	1 你们公司分支方案是什么样的?
    2 使用git开发,遇到过冲突吗?
    3 你知道git 变基?
    4 git pull 和git fetche的区别
    5 你知道git flow吗?git 工作流,它是一个别人提出的分支方案
    	我们没有用,我们用的就是master+dev+bug分支方案
        
    6 使用git 的操作流程
   	7 什么是pr?
    

标签:git,代码,dev,文件夹,提交,操作,分支
来源: https://www.cnblogs.com/th0bu3/p/16537043.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有