更新时间:2023-05-06 GMT+08:00

Git本地研发场景

背景介绍

在CodeArts云端创建一个README文件的空仓库,然后架构师或者项目负责人需要把本地框架代码推送到这个空仓库,最后,其他开发人员将云端架构代码克隆到本地,进行增量应用开发。

  • Git代码传输支持SSH和HTTPS两种传输协议,本节基于SSH传输协议进行的操作。
  • 如果想使用HTTPS方式,直接下载HTTPS密码,当克隆、推送代码时直接输入HTTPS用户名密码即可。
  • 同一仓库SSH和HTTPS的地址不同。

推送架构代码

  1. 打开本地框架代码,确保根目录名与云端创建的代码仓库名一致,在根目录下右键打开Git bash终端。
  2. 推送本地代码到云端。

    在当前Git Bash终端依次输入如下命令:

    1. 初始化本地代码仓库,执行该命令后,在“D:/code/repo1/”下多了一个“.git”文件夹。
      1
      $ git init
      
    2. 关联云端代码仓库。
      1
      $ git remote add origin repoUrl
      

      仓库地址如下图进入仓库详情页,单击”克隆/下载“,所示单击红色方框处获取。

    3. 推送代码到云仓库。
      1
      2
      3
      4
      5
      $ git  add . 
      $ git  commit  -m "init project"
      $ git  branch --set-upstream-to=origin/master master
      $ git  pull  --rebase
      $ git  push
      

克隆代码

开发人员在本地准备克隆云端架构代码。

  1. 在准备把代码克隆到的目标文件夹下,右键打开Git bash终端,如下图所示。

  1. 克隆仓库,URL地址如下图所示单击红色方框处获取。
    1
     $ git clone repoUrl   //将代码从远端仓库clone到本地
    

代码提交

一次修改被成功提交到远端仓库会历经四个阶段:1本地工作区 > 2缓存区 > 3版本库 > 4远端版本库

通过执行相应的Git命令,文件在这四个区域跳转,并呈现不同的状态,如下图所示。

主要涉及如下三步操作:

  1. #git add/rm filename //将新增、修改或者删除的文件增加到暂存区
  2. #git commit –m “commit message” //将已暂存的文件提交到本地仓库
  3. #git push //将本地代码仓库修改推送到远端仓库

分支操作

  • 新建分支

    Git新建分支的本质就是创建一个指向最后一次提交的可变指针,所以,Git分支的创建不是复制版本库的内容,仅仅是新建了一个指针,它以40个字符长度SHA-1字串形式保存在文件中。

    1
    #git branch branchName commitID
    

    基于commitID即某一个全球版本号拉出新分支,如果没有commitID则基于当前分支的HEAD拉出新分支。

    例如,新建feature分支,执行的命令为git branch feature,如下图所示。

  • 切换分支

    命令如下。

    1
    #git checkout branchName
    

    例如,切换到feature分支,执行的命令为git checkout feature,如下图所示。

  • 分支合并

    无论哪种工作流都会涉及到分支合并(把一个分支中的修改整合到当前分支),主要有两种方法:三方合并(merge) 和衍合(rebase)。通过对同一种场景进行不同操作体会两种合并方法的区别。

    场景:master分支新增了C4节点, hotfix分支新增了C3节点,现将hotfix分支合并到master分支:

    1. 三方包括hotfix新增节点C3,master新增节点C4,以及两者的共同祖先节点C2。这种合并操作简单,但新增合并节点C5,形成了环形,版本记录可读性差,如下图所示。
      1
      2
      #git checkout master
      #git merge hotfix
      

    2. 衍合先将master分支新增节点C4以补丁形式保存在.git/rebase目录中,然后同步hotfix分支最新代码,再应用补丁C4’,如下图所示。
      1
      2
      #git checkout master
      #git rebase hotfix
      

  • 冲突解决
    1. 场景一:两个合并分支修改了同一行代码

      解决方法

      1. 分析哪种修改方法正确,手动合并。
      2. 提交修改。
    2. 场景二:文件被重命名为不同的名字

      解决方法

      1. 确认哪个名字是正确的,删除错误的。
      2. 提交修改。