Git源代码管理(详解)

一、Git源代码管理

思考一个小问题:如果多个协同开发同一个项目?

1.Git的介绍

Git是目前世界上最先进的分布式版本控制系统,没有之一。(目前也有公司在用SVN)

2.Git的作用

源代码的管理,为了方便多人协同开发同一个项目,方便版本记录和代码备份

3.Git管理源代码的特点

  • Git是分布式管理,服务器和客户端都有版本控制能力,都能进行代码的提交、合并

Git源代码管理(详解)_第1张图片

  • Git会在根目录下创建一个 .git 的隐藏文件夹,作为本地的代码仓库

Git源代码管理(详解)_第2张图片

4.Git操作流程图解

Git源代码管理(详解)_第3张图片

说明:首先从Git服务器(远程仓库)克隆数据到本地仓库,然后再到我们的客户端,紧接着通过客户端编写代码之后提交到缓存区再到本地仓库,最后再提交到Git服务器(远程仓库)

5.工作区、暂存区和仓库区

Git源代码管理(详解)_第4张图片

  • 1.工作区
  • 对于添加、修改、删除文件的操作,都发生在工作区
  • 2.暂存区
  • 暂存区是指将工作区中完成的小阶段的操作的存储,是版本库的一部分
  • 3.仓库区
  • 仓库区表示个人开发的一个小阶段的完成
  • **说明:**仓库区记录的版本是可以查看并且回退的,但是在暂存区的版本一旦提交就再也没有了

二、单人本地仓库操作流程

1.Git担任本地仓库操作—安装配置

  • 本地仓库是个 .git隐藏文件

(1)安装git

​ sudo apt-get install git

(2)查看git安装结果

​ git

(3)创建项目

​ 在桌面创建一个work文件夹,表示是工作中的一个项目文件

​ cd /Desktop/work/

​ 仓库初始化

​ git init

(4)配置个人信息

​ git config user.name ‘wtt’

​ git config user.email ‘[email protected]

说明:如果默认不配置的话,会使用全局配置里面的用户名和邮箱

​ 全局git配置文件路径: ~/.gitconfig

2.单人本地操作流程

    1. 新建.py文件

      在项目文件work中创建一个login.py文件,用于版本控制演示

  • ​ 2. 查看文件状态

    ​ git status

    ​ 之后出现的红色文件表示新建文件或者新修改的文件,都在工作区

    ​ 绿色文件表示在暂存区

    1. 将工作区文件添加到暂存区
      • 添加项目中的所有文件到暂存区
        • ​ git add .
      • 添加项目中的指定文件到暂存区
        • ​ git add login.py
    1. 将暂存区的文件提交到本地仓库区
      • 添加暂存区的文件到仓库区
        • ​ git commit -m “立项”
        • ​ 这里面的"立项"指的是版本的描述信息
    1. 接下来可以在login.py文件中编辑代码
      • 代码编辑完成后即可进行add和commit操作
        • 提示:添加和提交的合并命令
          • git commit -am “版本描述”
        • 提交两次代码,会有两个版本记录
    1. 查看历史记录
      • 查看历史版本
        • git log
        • 或者 git reflog
      • git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit纪律,git log则不能查看已经删除了的commit记录
    1. 回退版本
      • 回退版本有两种方案
        • 方案一:
          • get reset --hard HEAD^ 代表回退到当前最新版本的前一个版本 ^^表示回退到上两个版本,以此类推
          • get reset --hard HEAD~9 代表回退到当前最新版本的前9个版本,以此类推
        • 方案二:(建议使用)
          • git reset --hard 版本号
          • 版本号可以通过 git reflog 查看 最前面的6位字符串就是版本号
    1. 撤销修改
      • ​ 只能撤销工作区、暂存区的代码、不能撤销仓库区的代码
      • ​ 撤销仓库去的代码相当于回退版本的操作
        • 1.撤销工作区代码
          • 在login.py文件中新增代码name=“csdn”,然后不提交到暂存区,只保留在工作区
            • git checkout login.py # 通过这个命令可以撤销修改
        • 2.撤销暂存区的代码(需要两步)
          • 新增代码 num10 = 456 ,并且add到暂存区
            • 首先1.将暂存区代码撤销到工作区
              • git reset HEAD login.py # 先将暂存区撤销到工作区
            • 然后2.将工作区的代码撤销修改
              • git checkout login.py # 在工作区中进行撤销修改
    1. 对比版本
      • ​ 1.对比版本库与工作区
        • 在login.py文件中新增代码address = 192.168.1.1,不add到暂存区,保留在工作区
        • git diff HEAD – login.py // HEAD代表的是版本库 loing.py是工作区的代码文件
      • ​ 2.对比版本库
        • 在login.py文件中新增代码addr = “fux” ,并add到暂存区
        • git diff HEAD HEAD^ – login.py // 比较当前版本和前一个版本中login.py代码的不同
    1. 删除文件

      • ​ 删除文件分为确定删除和误删

          1. 确认删除处理
          • (1)删除文件 rm 文件名
          • (2)git确定删除文件 git rm 文件名
          • (3)删除后记录删除操作版本 git commit -m “删除文件1”
          1. 误删处理:撤销修改即可
          • (1)删除文件 rm 文件名
          • (2)git撤销修改 git checkout – 文件名

三、Git远程仓库Github

1.创建远程仓库(以下演示操作是在Github网站上创建远程仓库)

(1)登录注册Github

(2)创建远程仓库的入口

Git源代码管理(详解)_第5张图片

(3)编辑仓库的信息

Git源代码管理(详解)_第6张图片

(4)仓库创建完成

Git源代码管理(详解)_第7张图片

(5)查看仓库地址

​ 远程仓库地址:https://github.com/Wang-TaoTao/WangTao…git

Git源代码管理(详解)_第8张图片

​ 注:远程仓库地址分为https和ssh。我这里选的是https。直接复制下来

2.配置SSH

(1)首先修改本地计算机的git配置

​ 配置Github注册邮箱和用户名

vi .gitconfig

​ 住:这里面输入自己注册的用户名和邮箱

[user]
	email = 190018484@qq.com
	name = Wang-TaoTao

(2)生成SSH公钥

ssh-keygen -t rsa -C "[email protected]"

Git源代码管理(详解)_第9张图片

(3)接下来回到Github远程仓库

​ 1.配置SSH公钥入口

Git源代码管理(详解)_第10张图片

Git源代码管理(详解)_第11张图片

​ 2 . 将刚才复制的公钥粘贴到上面这个key里面。点击Add SSH key。

Git源代码管理(详解)_第12张图片

​ 3.配置SSH公钥完成

3.开始克隆项目

  • 准备经理文件 Desktop/manager/
  • 准备小王文件 Desktop/xiaowang/

经理需要做的工作

  • 立项:克隆远程仓库+配置身份信息+创建项目+推送项目到远程仓库

  • 1.克隆远程仓库到本地

    # 使用HTTPS
    cd ~/Desktop/managger/
    git clone   https://github.com/Wang-TaoTao/WangTao..git 
    
    # 使用SSH
    cd ~/Desktop/manager/
    git clone   git@github.com:Wang-TaoTao/WangTao..git
        
        
    说明:这两种方式都可以,git clone后面的就是刚才在Github网页复制的远程仓库地址
    
  • 2.克隆成功后配置经理身份信息(先新建一个项目文件)

    cd ~/Desktop/manager/xiangmu/
    git config user.name "经理"
    git config user.email "[email protected]"
    
  • 3.创建项目并推送到远程仓库

    # 创建一个文件
    cd ~/Desktop/manager/xiangmu/
    touch login.py
    # 将工作去添加到暂存区
    git add login.py
    # 暂存区提交到本地仓库区
    git commit -m "第一个项目文件"
    # 现在可以推送到远程仓库了
    git push
    

Git源代码管理(详解)_第13张图片

  • 注:现在在Github上已经可以查看到这个项目和文件了

  • 在 push 的时候需要设置账号与密码,该密码则是 github 的账号与密码

  • 如果在每次 push 都需要设置账号与密码,那么可以设置记住密码

    设置记住密码(默认15分钟):
    git config --global credential.helper cache
    如果想自己设置时间,可以这样做(1小时后失效):
    git config credential.helper 'cache --timeout=3600'
    长期存储密码:
    git config --global credential.helper store
    

小王需要做的工作

  • 获取项目:克隆项目到本地、配置身份信息

  • 1.克隆项目到本地

    cd ~/Desktop/xiaowang/
    git clone  git@github.com:Wang-TaoTao/WangTao..git
    # 我这里使用的是https
    
  • 2.配置小王的身份信息

    cd ~/Desktop/xiaowang/xiangmu/
    git config user.name '小王'
    git config user.email '[email protected]'
    
    
  • 注:现在小王的身份信息配置之后就可以跟经理协同开发同一个项目了

4.模拟多人协同开发

1.模拟小王先编辑xiangmu文件下的login.py文件代码

  • 进入小王的本地仓库:cd ~/Desktop/xiaowang/xiangmu/
  • 编辑代码:vi login.py 写入 name=xiaowang
  • 本地仓库记录版本:git commit -am “name小王”
  • 推送到远程仓库:git push

2.模拟经理后编辑login.py文件代码

  • 进入经理本地仓库:cd ~/Desktop/manager/xiangmu/
  • 同步服务器代码:git pull
  • 编辑代码:age=22
  • 本地仓库记录版本:git commit -am “age22经理”
  • 推送到远程仓库:git push

3.模拟小王同步服务器代码

  • 本次可以把经理写的age变量同步到小王的本地仓库
  • 小王执行 git pull
  • 然后查看本地login.py文件

4.按照以上1、2、3步骤循环操作,计科实现基本的协同开发

**5.**总结:

  • 要使用git命令操作仓库,需要进入到仓库里面
  • 要同步服务器代码就执行:git pull
  • 本地仓库记录版本就执行:git commit -am “版本描述”
  • 推送代码到服务器就执行:git push
  • 编辑代码前要先git pull,编辑完再commit,最后推送再git push。要养成良好的习惯奥!

5.代码冲突问题

  • 多人协同开发的时候,避免不了出现代码冲突的情况
  • 也就是多人同时修改了同一个文件
  • 这会影响正常的开发进度,并且使程序出错
  • 一旦出现了代码冲突,必须先解决再做继续开发

代码冲突演练

1.小王先编辑login.py文件代码

  • 进入小王本地仓库:cd ~/Desktop/xiaowang/xiangmu/
  • 拉取服务器最新代码:git pull
  • 编辑代码:address = “fux”
  • 本地仓库记录版本:git commit -am “记录地址”
  • 推送到远程仓库:git push

2.经理后编辑login.py文件代码

  • 进入经理本地仓库:cd ~/Desktop/manager/xiangmu/

  • 不拉取最新数据直接编辑代码:like = “敲代码”

  • 本地仓库记录版本:git commit -am “记录爱好”

  • 推送到远程仓库:git push 注意 此时会出现代码冲突!

    提示需要先pull

Git源代码管理(详解)_第14张图片

​ 提示冲突文件名

Git源代码管理(详解)_第15张图片

3.解决代码冲突问题

  • 原则:谁冲突谁解决,并且一定要协商解决
  • 方案:保留所有代码或者保留某一人代码
  • 解决完冲突代码后,依然需要add,commit,push

Git源代码管理(详解)_第16张图片

补充:

  • 容易冲突的操作方式
    • 多个人同时操作了同一个文件
    • 一个人一直写不提交
    • 修改之前不更新最新代码
    • 提交之前不更新最新代码
    • 擅自修改同事代码
  • 减少冲突的操作方式
    • 养成良好的操作习惯,先pull在修改,修改完立即commitpush
    • 一定要确保自己正在修改的文件是最新版本的
    • 各自开发各自的模块
    • 如果要修改公共文件,一定要先确认有没有人正在修改
    • 下班前一定要提交代码,上班第一件事拉取最新代码
    • 一定不要擅自修改同事的代码

6.标签

  • 当某一个大版本完成之后,需要打一个标签
  • 目的是为了记录版本号,备份大版本的代码

1.模拟经理打标签

  • 进入到经理的本地仓库

    cd ~/Desktop/manager/xiangmu/
    
    
  • 经理先在本地打标签

    git tag -a "标签名" -m ”标签描述"
    例:
    git tag -a V1.0 -m “1.0版本""
    
    
  • 推送标签到远程仓库

     git push origin 标签名
     例:
     git push origin v1.0
    
    

补充:删除本地和远程标签

  # 删除本地标签
  git tag -d 标签名
  # 删除远程仓库标签
  git push origin --delete tag 标签名

7.分支

  • 作用:
  • 区分生产环境代码以及开发环境的代码
  • 增添新功能或者攻克难题
  • 解决线上bug
  • 特点:
  • 项目开发中公用分支包括master、dev
  • 分支master是默认分支,用于发布,当需要发布时将dev分支合并到master分支
  • 分支dev是用于开发的分支,开发完阶段性的代码,需要合并到master分支

1.模拟经理分支操作

(1)进入到经理的本地仓库

cd ~/Desktop/manager/xiangmu

(2)查看当前分支

git branch

(3)经理创建并切换到dev分支

git checkout -b dev

(4)设置本地分支跟踪远程指定分支(将分支推送到远程)

git push -u origin dev

(5)经理在dev分支编辑代码不会影响到master分支的代码

(6)将dev分支合并到master分支

# 先进入master分支
git checkout master
# 然后合并
git merge dev
# 将合并分支推送到远程
git push

(7) 小王同步经理合并后的分支代码里面的内容

git pull

你可能感兴趣的:(Git源代码管理(详解))