当前位置: 首页 > web >正文

Git——分布式版本控制工具

一.概述

1.开发中的实际场景

  1. 备份
  2. 代码还原
  3. 协同开发
  4. 代码追溯:追溯问题代码的编写人和编写时间

2.版本控制器的方式

1.集中式版本控制工具

集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代 码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
举例:SVN和CVS

2.分布式版本控制工具

分布式版本控制系统没有“中央处理器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。多人协作只需要将各自的修改推送给对方,就能互相看到对方的修改了。
举例:Git

3.SVN

4.Git 

Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西是一样的。我们使用Git并且有个中心服务器,仅仅是为了方便大家的修改。但是这个服务器的地位和我们每个人的PC是一样的。我们可以把它当做一个开发者的PC就可以。

5.Git工作流程 

 

命令如下:

  1. clone(克隆):从远程仓库中克隆代码到本地仓库
  2. checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加):再提交前先将代码提交到暂存区
  4. commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch(抓取):从远程仓库抓取到本地仓库,不进行任何合并动作,一般使用比较少
  6. pull(拉取):从远程仓库拉取到本地仓库,自动进行合并(merge),然后放到工作区,相当于 fetch+merge
  7. push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

 二.Git的安和常用命令

1.GIt的环境配置

1.下载和安装

下载地址:Git - Downloads

双击下载的安装文件来安装Git。安装完成后在电脑桌面(也可以是其他目录)点击右键,如果能够看 到如下两个菜单则说明Git安装成功。

备注:
 Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具

当安装 Git 后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用 该用户信息。

 2.基本配置

打开 Git Bash 设置用户信息

git config --global user.name "your name"
git config --global user.email "your e-mail"

查看配置信息

git config --global user. name

git config --global user.email

3.为常用指令配置别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录,创建.bashrc 文件
    部分windows系统不允许用户创建点号开头的文件,可以打开 Git Bash ,执行 touch ~/.bashrc
  2. 可以在 .bashrc 文件中输入如下内容:
    1. 用于输出git提交日志
      alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
    2. #用于输出当前目录所有文件及基本信息
      alias ll='ls -al'
  3. 打开 Git Bash,执行 source ~/.bashrc

4.解决Git Bash乱码问题

  1. 打开Git Bash执行下面命令
    git config --global core.quotepath false
  2. ${git_home}/etc/bash.bashrc 文件最后加入下面两行
    export LANG="zh_CN.UTF-8"
    export LC_ALL="zh_CN.UTF-8"

 2.获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库。

  1. 在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
  2. 进入这个目录中,点击右键打开Git bash窗口
  3. 执行命令 git init
  4. 如果创建成功后可在文件夹下看到隐藏的 .git 目录

3.基础操作指令 

 Git 工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行 Git 的命令而发生变化。

  1. git add(工作区 -> 暂存区)
  2. git commit(暂存区 -> 本地仓库)

3.1 查看修改的状态(status)

  • 作用:查看修改的文件的状态(暂存区、工作区)
  • 命令:git status

3.2 添加工作区到暂存区(add)

  • 作用:添加工作区的一个或多个文件到暂存区
  • 命令:git add 单个文件名(demo.txt)/通配符(.)
    • 将所有文件添加到暂存区:git add .

3.3 提交暂存区到本地仓库(commit)

  • 作用:提交暂存区的文件到本地仓库的当前分支
  • 命令:git commit -m”注释“

3.4 查看提交日志(log)

  • 作用:查看提交记录
  • 命令形式:git log [option]
    • options:
      • --all:显示所有分支
      • --pretty=oneline:将提交信息显示为一行
      • --abbrev-commit:使得输出的commitID更简短
      • --graph:以图的形式显示

3.5 版本回退

  • 作用:版本切换
  • 命令:git reset --hard commitID
    • commitID 可以使用git log( git log --abbrev-commit --pretty=oneline --graph --all (精简输出))查看

  • 如何查看已经删除的记录?
    • git reflog

3.6 添加文件到忽略列表

一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动 生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录 中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。

 # 创建一个忽略文件(如果文件名起错了,可以用mv .gitingore .gitignore进行修改)
 touch .gitignore
 # 将不用提交的文件配到忽略文件中,例如:
 vi .gitignore
 *.a #不提交所有后缀名为a的文件

4.Git分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

4.1 查看本地分支

  • 命令:git branch

4.2 创建本地分支

  • 命令:git branch 分支名
  • 示例:git branch demo1

4.3 切换分支(checkout)

  • 命令:git checkout 分支名
  • 示例:git checkout demo1

4.4 合并分支(merge)

  • 命令:git merge 分支名称(表示将某一分支合并到当前所在分支,一般都是合并到master分支)
  • 示例:git merge demo1

4.5 删除分支

不能删除当前分支,只能删除其他分支

  • 命令1:git branch -d 分支名(删除分支时,需要做各种检查)
  • 命令2:git branch -D 分支名(删除分支时,不做任何检查,强制删除)

4.6 解决冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

  1. 处理文件中冲突的地方(修改文件中的内容为我们希望合并后的样子)
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)

冲突部分的内容如下所示:

4.7 开发中分支使用原则与流程

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发线上分离开发进行重大的Bug修改、开发新功能,以免影响开发主线。

在开发中,一般有如下分支使用原则与流程:

  • master(生产)分支
    线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
  • develop(开发)分支
    是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
  • feature/xxxx分支
    从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
  • hotfix/xxxx分支
    从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。
  • 还有一些其他分支,例如test分支(用于代码测试)、pre分支(预上线分支)等。

三.Git远程仓库

1.常用的托管服务

  • Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
  • gitHub(地址:https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名 gitHub。
  • 码云(地址:Gitee - 基于 Git 的代码托管和研发协作平台)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快。
  • GitLab(地址:The most-comprehensive AI-powered DevSecOps platform)是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。

2.注册码云

要想使用码云的相关服务,需要注册账号(地址: 注册 - Gitee.com )

3.创建远程仓库

创建步骤如下:

仓库创建完成后可以看到仓库地址,如下图所示:

 

4.配置SSH公钥

  • 生成SSH公钥
    • ssh-keygen -t rsa
    • 不断回车
      • 如果公钥已经存在,则自动覆盖
  • Gitee 设置账户公共钥
    • 获取公钥
      • cat ~/.ssh/id_rsa.pub
    • 验证是否配置成功

      • ssh -T git@gitee.com

5.操作远程仓库

5.1 添加远程仓库

此操作是先初始化本地库,然后与已创建的远程库进行对接。

  • 命令: git remote add <远端名称> <仓库路径>
    • 远端名称:一般是是origin,取决于远端服务器设置
    • 仓库路径,从远端服务器获取此URL
    • git remote add origin https://gitee.com/gyutian/git_test.git

5.2 查看远程仓库

  •  命令:git remote

5.3 推送文件到远程仓库

  • 命令:git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
    • 如果远程分支名和本地分支名称相同,则可以只写本地分支
      • git push origin master
    • -f :表示强制覆盖
    • --set-upstream: 推送到远端的同时并且建立起和远端分支的关联关系。
      • git push --set-upstream origin master
    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
      • git push 将master分支推送到已关联的远端分支。

5.4 本地分支与远程分支的关联关系

 查看关联关系我们可以使用 git branch -vv 命令

5.5 从远程仓库克隆

如果已经有一个远端仓库,我们可以直接clone到本地。

  • 命令:git clone <仓库路径> [本地目录]
    • 本地目录可以省略,会自动生成一个目录

5.6 从远程仓库中抓取和拉取

远程分支和本地的分支一样,我们可以进行 mergec操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取 命令:git fetch [remote name] [branch name]
    • 抓取命令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取所有分支
  • 拉取 命令:git pull [remote name] [branch name]
    • 拉去命令就是将远端仓库的修改拉到本地并自动进行合并,等同于 fetch + merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支

5.7 解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。

A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。如下图所示。

在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同。

四.GitHub Desdktop

 最后为大家推荐一个十分好用的软件——GitHub Desdktop,这是一款由 GitHub 官方开发的图形化界面(GUI)客户端,主要用于简化 Git 版本控制和 GitHub 平台的操作。这个可以登录gitee账号来使用。

 

 

http://www.xdnf.cn/news/14651.html

相关文章:

  • NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术
  • android gradle的优化
  • uni-app-配合iOS App项目开发apple watch app
  • 【大模型学习】项目练习:知乎文本生成器
  • RIP路由协议实验任务八:RIPv1配置与分析
  • Seata的总结
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • NestJS中实现动态Cron任务管理
  • 【 感知集群】大规模分布式基础设施的AI赋能蓝图
  • JS红宝书笔记 8.2 创建对象
  • IPv4编址及IPv4路由基础
  • 73、MYSQL ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin含义
  • Transformer结构介绍
  • 记录存储的使用
  • uni-app项目实战笔记16--实现头部导航栏效果
  • 优化TCP/IP协议栈与网络层
  • 工程师生活:清除电热水壶(锅)水垢方法
  • Apache Hive技术详解
  • NetworkManager介绍与用法
  • Singularity 安装
  • [接口-ihrm]
  • Git版本控制详细资料
  • 计算机网络:(五)信道复用技术,数字传输系统,宽带接入技术
  • [Data Pipeline] Kafka消息 | Redis缓存 | Docker部署(Lambda架构)
  • 69、数据访问-准备阿里云redis环境
  • 面试题:设计一个分布式“附近的人”功能(如微信附近的人、交友应用位置匹配)
  • WSL 安装使用和常用命令
  • AD学习(4)
  • 使用MATLAB求解二维顶盖驱动流问题的详细代码和说明