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

Git 基本操作之Git GUI界面和git命令行如何选择

在这里插入图片描述


1. 为啥推荐使用git命令行

我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。
VScode Git 界面操作引发的惨案

在这里插入图片描述上面的惨案是VSCode的一个用户通过Git界面执行了git init 后,无意间按了clean all按钮,这个按钮封装的命令应该是git clean -d -f 命令,会把所有的未加入git的文件删除。因为这个用户可能是git小白,不明白clean在git的含义,导致他的项目中5000多个文件全部被删除了。他还打算去Windows的垃圾箱中恢复那5000多个文件,但是现实是残酷的,git clean 是不会调用垃圾箱的API的,所以这个用户永久的失去了他的项目,所以他发了很多和FUCK xxx。

其实推荐使用git命令行的理由主要有三个:
(1)Git命令行的功能强大,GUI界面只是封装了一小部分
(2)先学好命令行后,使用任何的GUI工具都是如鱼得水
(3)Git命令行的很多操作可以优化,效率比GUI快很多

注意:如果你对git命令已经很熟悉了,使用Git命令行还是界面工具其实都差不多,不需要纠结该用哪一个不该用哪一个,但是假如你是Git小白,建议从Git命令学起

知道了学习Git命令行的必要性,下面让我们一起看下git的基本命令操作吧,这里做一个抛砖引玉的作用,欢迎大家一起讨论git命令的妙用

2. Git命令的基本操作讲解

2.1 Git 命令的仓库操作

仓库就是存储项目代码的地方,即我们计算机磁盘下的目录。git仓库分为本地仓库和远程仓库。本地仓库是指本地存储代码的根目录以及子目录,远程仓库是指放在服务器端存储代码的一个目录。仓库相关的命令如下:

2.1.1 新建本地仓库

主要是用于工程初始化,在磁盘上新建一个工程目录,然后在根目录下执行下面的目录然后本地仓库就建好了

git init

2.1.2 检出仓库

当我们需要加入一个新项目的时候,一般都会获得新项目的管理员分配的git仓库地址,然后我们可以在本地选择一个合适的目录,执行下面的命令,就可以把远程仓库的代码下载到本地了。此时本地仓库和远程仓库默认是关联的。

git clone https://github.com/magnusja/libaums.git

要下载github上的仓库也可以使用这种方式

在这里插入图片描述在github的仓库界面拿到仓库的链接后,执行git clone 命令下载仓库。

2.1.3 查看远程仓库

假设我们的同事加入了我们的项目,想拉代码了解下项目,此时刚好项目负责人不在,我们又不想去浏览器记录上去进到服务器里查看我们项目的git链接,但我们又需要马上拿到这个git链接给到同事,这时我们就可以执行下面的命令:

git remote -v

如果执行结果是空的,证明你的本地仓库没有和远程仓库关联。成功的话结果如下

在这里插入图片描述

2.1.4 添加/删除远程仓库

在项目刚开始搭建的时候,我们在本地建立了一个本地仓库,另外需要在服务端新建一个远程仓库,此时远程仓库与本地仓库没有关联关系,我们本地仓库的文件无法推送到远程仓库,远程仓库的代码文件也无法被拉取到本地,这时需要执行下面的命令去添加本地仓库和远程仓库的关联关系

git remote add origin https://xxxxx/xxx.git

这里的origin是远程仓库的名称,可以自己随便取,后面的url是远程仓库的http地址

如果我们想切断与远程仓库的关联关系,也就是删除远程仓库,平时极少用到,命令如下:

git remote rm origin

2.1.5 拉取/推送远程仓库

每次在开始修改文件或者提交文件的时候,需要先从远程仓库中拉取最新的代码,确保本地仓库的代码是最新的,命令如下:

git pull origin dev

origin 是远程仓库的名称,dev是拉取代码所在的分支名称
我们开发完代码后,将代码提交到本地的仓库,这时需要我们推送到远程仓库,命令如下:

git push origin master

origin 是远程仓库的名称,master是代码主分支名称,也可以是其他分支的名称

2.2 Git 命令的基本操作

3.2.1 查看文件的状态

当我们修改了本地仓库中的文件后,可以使用下面的命令查看我们修改的文件

git status

当然我们可以加参数来看具体的操作

比如执行: git status -s

在这里插入图片描述
在文件的前面会出现AM的字样,这个意思是本次的变更包含增加(A)和修改操作(M)

3.2.2 查看变更内容

当我们修改了文件的内容后,我们可以通过git命令查看变更的内容,命令如下

git diff #变更的文件

在这里插入图片描述
需要注意的是,git diff 命令只能比较未被添加到暂存区的内容。查看 git add过的内容 git diff --cached

3.2.3 添加/提交/推送文件

当我们修改或者新增一个文件后,我们可以执行项目的命令添加到文件的暂存区
#添加指定文件到暂存区

git add xxx.txt
#添加所有文件到暂存区
git add .
git add -A

我们执行完git add 命令后,我们的文件被添加到了暂存区,接下来就是执行提交命令将我们的修改提交到本地仓库

# xxx 是本次提交的描述信息
git commit -m 'xxxxx'

当文件被提交到本地的代码仓库后,其实我们的代码还是有丢失的风险,因为我们的机器如果坏了就难受了,所以我们需要把代码推送到远程仓库,执行下面命令:

git push origin master

3.2.4 撤销修改

当文件没有执行git add 命令的时候,我们如果想要撤销我们的修改,我们可以执行下面的命令:

#撤销已编辑的内容,恢复到未修改前的状态
git checkout xxx.txt

假设我们的代码已经提交到了暂存区,想要恢复到以前的版本,命令如下

#撤销add操作,但是会保留已编辑的内容
git reset HEAD xxx.txt

如果我们的代码已经提交到了本地仓库,这时本地仓库会产生一个版本号,我们可以使用版本号撤销已经提交的代码

git reset --mixed 版本号

git reset命令的参数有:mixed、soft、hard:
–mixed 默认是这种,代表撤销git add和git commit的操作,保留编辑器的代码;
–soft代表撤销git commit,不撤销git add操作,同时保留编辑器的代码;
–hard参数很暴力,直接撤销commit和add的操作,撤销所有改动的代码,当你决定用 --hard参数的时候,就代表着你应该已经决定了放弃修改过的所有代码。

如果你的代码已经push到了远程仓库,这时候需要我们先把本地仓库的文件撤销到指定版本,然后再把撤销后的版本再push到远程仓库,这里的操作比较危险,因为可能会涉及到别人的修改,所以这部分我就不讲解了,感兴趣的可以自己百度
当代码撤销完后我们后悔了,想恢复到之前的版本,但是我们又找不到版本历史变更记录了,这时候不要慌,可以使用下面的命令试试:

git reflog

在这里插入图片描述
执行这个命令后会列出最近的代码记录,然后找到对应提交的版本号,做下cherry-pick或者git reset 就可以了。

2.3 Git 命令的分支操作

之前的所有操作都是在master分支,也就是主分支上进行的,分支操作的命令主要是用于创建分支、切换分支、查看分支、合并分支这些操作。

2.3.1 创建本地分支

#创建本地分支,但是不会切换到创建分支上,branch_name是分支的名称 
git branch branch_name
#创建本地分支,并切换到创建的分支上,branch_name是分支的名称; 如果分支已创建,则切换到分支上 
git checkout -b branch_name

2.3.2 创建远程分支

创建远程分支需要先在本仓库创建本地分支,然后推送到远程仓库,远程的分支就创建好了

git push origin branch_name

2.3.3 查看所有分支

git branch -a

2.3.4 查看远程所有分支

git branch -r

2.3.5 查看本地所有分支

git branch

2.3.6 切换分支

git checkout branch_name

2.3.7 合并分支

把另一个分支上的内容与当前分支进行合并,合并后会生成一次合并的提交记录。

#当前分支是dev2,合并dev分支内容到dev2 git merge dev 
#推送合并后dev2分支内容到远程仓库 
git push origin dev2

3.3.8 删除分支

#删除本地分支 
git branch -d dev 
#删除远程分支,origin为远程仓库名称,dev为远程分支名称 
git push origin :dev

2.4 Git 命令的标签操作

我们每一次的代码提交,都会生成一个版本号,每个版本号之间连接起来就会形成一条线,只要不断有新提交生成,这条线就会一直延伸下去,打一个标签(tag)好比在这条线作了一个标记。项目在迭代开发的时候,每开发完一个版本,就在分支上打一个tag,然后运维组依据这个tag发布测试环境、灰度环境,由测试组进行测试验证,开发组继续在原来的分支上进行迭代开发,提交内容,彼此之间不受影响。

2.4.1 查看标签

git tag

2.4.2 创建标签

#在本地打一个标签 
git tag TAG_20230214 
#推送标签到远程仓库 
git push origin TAG_20230214 

2.4.3 删除标签

#删除本地仓库上的标签 
git tag -d TAG_20230214 
#删除远程仓库上的标签 
git push origin:TAG_20230214 

2.5 Git 命令之冲突解决

2.5.1 为啥会产生冲突

代码冲突简单来说就是同一个文件的同一个位置都修改了,且内容不同,会产生冲突。例如,在文件A第十行,你添加了一个“hello world”,另外一个同事在文件A的第十行添加了一个“helloworld”,并且早于你提交远程仓库,你再提交的时候,就会发生冲突。这里需要注意的是,所谓的同一个位置可能是一行代码、也可能是几行。
在这里插入图片描述

2.5.2 解决冲突

解决冲突就是决定你和同事修改的代码是留你自己的代码还是留同事的代码,还是你们的代码需要共同保留,做一些局部的删减,这就是解决冲突的过程。解决完后将你的代码add到暂存区,然后执行

git merge --continue

然后提交就可以了,如果是cherry-pick执行

git cherry-pick --continue

如果要放弃你的修改,则执行

git merge/cherry-pick --abort

3.Android Studio Git插件搭配git命令行提效

3.1 查看git的提交记录

在这里插入图片描述

3.2 查看提交的人

在这里插入图片描述

3.3 快速查看对比本地的修改和远程分支的差异

在这里插入图片描述等等,我比较推荐使用Git命令行和Android Studio的Git插件搭配使用。效率会提升很多

总结

Git命令其实还有很多,无法一一穷尽,我们用命令行不是为了装逼,而是为了更安全、更高效的进行项目开发。由于是团队开发,所以我们在合并代码和提交代码时都需要更加小心,否则因为你的提交干掉了别人的代码,这会让别人的辛苦变成一场空;如果学好git命令行,这些问题都能很好的避免。而且命令行学好了,操作图形界面更是如鱼得水。在工作中我们可能会遇到各种各样提交代码的问题,这时候我们去学习好Git命令行,能快速的解决这类问题。将时间用在更重要的事情上。

相关文章:

Git 基本操作之Git GUI界面和git命令行如何选择

1. 为啥推荐使用git命令行 我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。 VScode Git 界面操作引发的惨案 上面的惨案是VS…...

Python编程 动态爱心

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.所用库 1.random简介 2.math 简介 3.tkinter库的简介 二.实际图 三.…...

JavaScript :基础语法

位置&#xff1a; HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间。 JavaScript 输出方式 window.alert() 弹出警告框。document.write() 将内容写到 HTML 文档中。innerHTML 写入到 HTML 元素。console.log() 写入到浏览器的控制台。 …...

buu [AFCTF2018]Single 1

题目描述&#xff1a; Jmqrida rva Lfmz (JRL) eu m uqajemf seny xl enlxdomrexn uajiderc jxoqarerexnu. Rvada mda rvdaa jxooxn rcqau xl JRLu: Paxqmdyc, Mrrmjs-Yalanja mny oekay. Paxqmdyc-urcfa JRLu vmu m jxiqfa xl giaurexnu (rmusu) en dmnza xl jmrazxdeau. Lxd …...

Linux C++ 200行完成线程池类

文章目录1、atomic使用2、volatile关键字3、条件变量4、成员函数指针使用5、线程池6、主线程先退出对子线程影响7、return、exit、pthread_exit区别8、进程和线程的区别1、atomic使用 原子操作&#xff0c;不可分割的操作&#xff0c;要么完整&#xff0c;要么不完整。 #includ…...

C语言指针剖析(初阶) 最详细!

什么是指针&#xff1f;指针和指针类型野指针指针运算指针和数组二级指针指针数组什么是指针&#xff1f;指针是内存中一个最小单元的编号&#xff0c;也就是地址。1.把内存划分为一个个的内存单元&#xff0c;一个内存单元的大小是一个字节。2.每个字节都给定唯一的编号&#…...

AcWing语法基础课笔记 第三章 C++中的循环结构

第三章 C中的循环结构 学习编程语言语法是次要的&#xff0c;思维是主要的。如何把头脑中的想法变成简洁的代码&#xff0c;至关重要。 ——闫学灿 学习循环语句只需要抓住一点——代码执行顺序&#xff01; while循环 可以简单理解为循环版的if语句。If语句是判断一次&#xf…...

A simple freeD tracking protocol implementation written in golang

可以使用的go版本freed调试代码 可以通过udp发送和接收数据 What is freeD? freeD is a very simple protocol used to exchange camera tracking data. It was originally developed by Vinten and is now supported by a wide range of hard- and software including Unreal…...

简约精美电商小程序【源码好优多】

简介 一款开源的电商系统&#xff0c;包含微信小程序和H5端&#xff0c;为大中小企业提供移动电子商务优秀的解决方案。 后台采用Thinkphp5.1框架开发&#xff0c;执行效率、扩展性、稳定性值得信赖。并且Jshop小程序商城上手难度低&#xff0c;可大量节省定制化开发周期。 功…...

全网详解 .npmrc 配置文件:比如.npmrc的优先级、命令行,如何配置.npmrc以及npm常用命令等

文章目录1. 文章引言2. 简述.npmrc3. 配置.npmrc3.1 .npmrc配置文件的优先级3.2 .npmrc设置的命令行3.3 如何设置.npmrc4. 配置发布组件5. npm常用命令6. 重要备注6.1 yarn6.2 scope命名空间6.3 镜像出错1. 文章引言 今天在某低代码平台开发项目时&#xff0c;看到如下编译配置…...

从0开始学python -31

Python3 模块-1 在前面的几个章节中我们基本上是用 python 解释器来编程&#xff0c;如果你从 Python 解释器退出再进入&#xff0c;那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法&#xff0c;把这些定义存放在文件中&#xff0c;为一些脚本或者交互…...

Jenkins的使用教程

介绍&#xff1a; Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 目的: 最重要目的就是把原来分散在各个机器上繁杂的工作全部…...

1.Maven的坐标和依赖

【maven坐标】1.groupId: 通常与域名反向一一对应2.artifactId: 通常使用实际项目名称3.version: 项目当前版本号4.packaging&#xff1a;maven项目的打包方式&#xff0c;默认是jar5.classifier: 定义构建输出的一些附属构件&#xff0c;例如&#xff1a;nexus-indexer-2.0.0.…...

Jenkins 笔记

Jenkins brew install jenkins-lts brew services restart jenkins-lts brew services stop jenkins-lts b999ff5683464346b6d083f894968121 l 软件构建自动化 &#xff1a;配置完成后&#xff0c;CI系统会依照预先制定的时间表&#xff0c;或者针对某一特定事件&#xff0c;…...

Python和Java语言,哪个更适合做自动化测试?

经常有测试新手问我&#xff1a;Python和Java语言&#xff0c;哪个更适合做自动化测试&#xff1f;本来想简单的回答一下的&#xff0c;但又觉得对不起大家对小编的信任。因此&#xff0c;小编今天专门写了一篇文章来回答这个问题。欢迎各位大佬补充~1、什么是自动化测试&#…...

互联网的路由选择协议

互联网的路由选择协议 文章目录互联网的路由选择协议路由选择协议的几个概念分层次路由选择协议内部网关协议RIP协议距离向量算法RIP协议的报文格式内部网关协议OSPFOSPF的报文格式✨OSPF的特点外部网关协议BGPBGP的报文格式参考本篇主要讨论的是路由表中的路由是如何得出来的。…...

接口幂等性处理

1.Token 机制&#xff1a; a首先客户端请求服务端&#xff0c;获取一个 token&#xff0c;每一次请求都获取到一个全新的 token&#xff08;当然这个 token 会有一个超时时间&#xff09;&#xff0c;将 token 存入 redis 中&#xff0c;然后将 token 返回给客户端。 b客户端…...

数字孪生智慧机场:透视数字化时代下的航空运营

在《智慧民航建设路线图》文件中&#xff0c;民航局明确指出&#xff0c;智慧机场是实现智慧民航的四个核心抓手之一。这一战略性举措旨在推进数字化技术与航空产业的深度融合&#xff0c;为旅客提供更加智能化、便捷化、安全化的出行服务&#xff0c;进一步提升我国民航发展的…...

SpringBoot 文件上传后查看404的问题和解决404后需要访问两次才能查看的问题

文件上传、图片上传的实现见这个&#xff1a; SpringBootVue 实现头像上传功能_Teln_小凯的博客-CSDN博客 在实现上面的功能后&#xff0c;发现查看图片的时候提示404&#xff0c;解决这个方法如下&#xff1a; 1、配置资源静态文件映射 第一个参数是页面请求的地址&#x…...

定时任务使用总结

定时任务表达式生成工具网站&#xff1a;https://cron.qqe2.com/定时任务选型&#xff1a;xxl-job 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/安装定时任务调度中心 xxl-job-admin第一步、先导入xxl-job的数据库&#xff1a;地址&#xff1a;https://gitee.com/xux…...

Jira和Confluence Server版终止支持倒计时365天,企业应对策略汇总

本文对Atlassian最新的Server版政策进行了解读&#xff0c;并给出应对方案&#xff1b;同时我们也将国内热门的替代工具与jira进行了比较细致的对比&#xff0c;以及介绍替换的优惠政策等。今天是2023年2月15日&#xff0c;距离 Atlassian 旗下 Jira、Confluence 等系列产品中国…...

GEE学习笔记九十一:栅格影像叠置分析

最近发现好多人都在问一个问题&#xff0c;两张影像如何取其相交区域&#xff1f;其实这个问题简单来讲就是多张栅格影像进行叠加分析。在GEE中栅格影像不像矢量数据那样有直接的函数来做数据分析&#xff0c;需要我们自己手动写一些代码来实现这些操作。要实现这个功能有很多方…...

linux系统编程入门

一、搭建环境 1、安装 Linux 系统&#xff08;虚拟机安装、云服务器&#xff09; https://releases.ubuntu.com/bionic/ 2、安装 XSHELL、XFTP https://www.netsarang.com/zh/free-for-home-school/ 3、安装 visual studio code https://code.visualstudio.com/ 4、Linu…...

JS代码安全防护常见的方式

文章目录1. 常量的混淆1.1 十六进制字符串1.2 unicode字符串1.3 字符串的ASCII码混淆1.4 字符串常量加密1.5 数值常量加密2. 增加逆向分析难度2.1 数组混淆2.2 数组乱序2.3 花指令2.4 jsfuck3. 代码执行流程的防护3.1 流程平坦化3.2 逗号表达式4. 其他代码防护方案4.1 eval加密…...

PHP(13)HTTP协议

PHP&#xff08;13&#xff09;HTTP协议一、HTTP请求1. 请求行2. 请求头3. 请求体二、HTTP响应1. 响应行2. 响应头三、设置HTTP响应四、模拟HTTP请求一、HTTP请求 1. 请求行 请求行独占一行。形式&#xff1a;请求方式 资源路径 协议版本号 GET /index.php HTTP/1.1 2. 请求…...

基于支持向量机 (SVM) 用php实现预测气温

Windows 10自带的天气应用有一个基于历史数据预测气温的功能&#xff0c;有一定的参考价值。那么如何去实现这一功能呢&#xff1f;本文采用php进行实现。 使用机器学习方法实现预测当日气温的算法需要涵盖许多的步骤&#xff0c;以下是一种基于支持向量机 (SVM) 的算法的简化…...

MySQL(五)

通过索引进行优化 索引基本知识 索引的优点 1、大大减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表3、将随机io变成顺序io 索引的用处 1、快速查找匹配WHERE子句的行2、从consideration中消除行,如果可以在多个索引之间进行选择&#xff0c;mysql通常会使用找到…...

Linux常用命令2

目录1.查找find&#xff08;1&#xff09;普通用法&#xff08;2&#xff09;组合用法2.xargs命令3.管道符4.查看文件内容(1)查看两个文件的差别&#xff1a;diff file1 fille2(2)正序查看文件内容cat(3)倒序查看文件内容tac(4)分页查看文件内容more(5)分页查看文件内容less(6)…...

『C/C++养成计划』Visual Studio Code编辑器配置(外观通用型扩展Minmal)

Visual Studio Code编辑器配置(外观&通用型扩展&Minmal)! 文章目录 一. vscode配置外观|通用型扩展1.1. 色彩主题配置扩展(GitHub Theme)1.2. 图标主题扩展(Material Icon Theme)1.3. 代码高亮扩展(better-comments)1.4. 错误警告扩展(error lens)1.5. 执行代码扩展(c…...

设计模式(适配器模式)

设计模式&#xff08;适配器模式&#xff09; 第二章 设计模式之适配器模式&#xff08;Adapter&#xff09; 一、Adapter模式介绍 适配器模式位于实际情况和需求之间&#xff0c;填补两者之间的差距。 二、示例程序1&#xff08;使用继承的适配器&#xff09; 1.示例程序示…...

电商网站系统建设/品牌推广方案包括哪些

C#格式化数值结果表 字符 说明 示例 输出 C货币string.Format("{0:C3}", 2)&#xff04;2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E0011.20E001G常规string.Format("{0:G}", 2)2N用分号隔开的数字string.Format("{0:N}…...

网站关键字太多/线上销售如何找到精准客户

大家应该都有这样经历&#xff0c;我们的手机在充电的同时也能边使用&#xff0c;有的同学就会说了&#xff0c;这是因为手机电池在充电的同时也在放电。如果这样想我们可能就把锂电池类比了一个蓄水池&#xff0c;以为它在进水的同时也能出水&#xff0c;其实这个比喻是错误的…...

杭州外贸网站建设公司排名/企业推广app

堆是什么&#xff1f; 是土堆吗&#xff1f; 那当然不是啦~ 堆是一种被看作完全二叉树的数组。 那么什么是完全二叉树呢&#xff1f; 如果二叉树中除去最后一层节点为满二叉树&#xff0c;且最后一层的结点依次从左到右分布&#xff0c;则此二叉树被称为完全二叉树。 堆的特…...

wordpress5.2 icp备案号/网络营销策略包括哪几大策略

文章目录高度相关的几个基本概念RTKLIB中高度设置与计算参考文献由于在GNSS定位中由多种高度表示&#xff0c;不同的高度概念很容易混淆&#xff0c;中英文对应有时候也容易搞混。因此整理了一下常用的两种高度——椭球高、正高的概念与计算&#xff0c;并且标注了对应的英文&a…...

wordpress能进后台进不去首页/网络营销实训个人总结

cad怎么画相贯线&#xff1f;cad图纸中需要绘制相贯线&#xff0c;该怎么绘制这个线呢&#xff1f;很简单的绘制方法&#xff0c; 需要使用excel辅助完成&#xff0c;下面我们就来看看cad相贯线的画法&#xff0c;需要的朋友可以参考下cad图纸需要绘制相贯线&#xff0c;该怎么…...

ecs和wordpress/今日重点新闻

属于( A )A、过程控制 B、数据处理C、科学计算 D、CAD/CAM14、与十进制数0.625D等值的二进制数是( A )A、0.1010B B、0.1101B C、0.1111B D、0.1011B15、世界上最先实现的程序存储的计算机是( B )A、ENIAC B、EDSAC C、EDVAC D、UNIVAC16、性能价格比也是一种用来衡量计算机产品…...