Git简单使用

news2024/11/12 10:27:10

Git简单使用

git初始化操作

pwd:显示当前目录

git init:把这个目录变成git可以管理的仓库

git clone: 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • **repo:**Git 仓库。
  • **directory:**本地目录。

git config --list:显示当前的git配置信息

编辑 git 配置文件:

git config -e    # 针对当前仓库 

或者:

git config -e --global   # 针对系统上所有仓库

设置提交代码时的用户信息:

git config --global user.name "runoob"
git config --global user.email test@runoob.com

工作区、暂存区和版本库

  • 工作区(Working Directory):指的是在电脑里能看到的目录,即本地工作目录;

  • 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。;

  • 版本库(Repository):.git目录, Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

在这里插入图片描述

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout – <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 当执行 git checkout HEAD . 或者 **git checkout HEAD <file> ** 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

后面我会对这里给出的重要命令分别利用具体例子进行解释,更容易理解一些。

基本操作

Git 常用的是以下 6 个命令:git clonegit pushgit addgit commitgit checkoutgit pull

在这里插入图片描述

说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

提交与修改命令:介于工作区和版本库之间

查看提交日志的命令,先放前面,没什么需要特别说明的

git log查看历史提交记录
git blame 以列表形式查看指定文件的历史修改记录

git status:查看状态,会提示当前哪些文件在工作区被修改尚未提交到暂存区;哪些文件已经被提交到暂存区,但尚未提交到当前分支;有几个提交已经提交到了当前分支,但尚未推送到远程仓库。

例如在本地新建了一个test.txt文件

在这里插入图片描述

在git命令行中被叫做<Untracked files>,而且提示你使用git add命令添加;不过<Untracked>只适用于新增的文件,如果是对已经提交过的文件做了改动,git的提示叫做:“Changes not staged for commit”。

git add:把需要提交的文件添加到暂存区

这里我们把test.txt添加到暂存区

在这里插入图片描述

在git命令行中的提示为"changes to be commited"

这里可以git add 指定文件,也可以git add .添加全部文件

git commit:把暂存区的所有内容提交到当前分支,也可以理解为提交到本地版本库

接下来我们把test.txt提交到当前分支

在这里插入图片描述

使用-m参数,添加代码提交说明是一个好习惯

git diff:查看工作区文件和暂存区里面的区别

注意这个命令是对比具体某一个文件的内容的差别,所以后面一般要带上具体的文件名称,该命令有两个主要的应用场景:

  1. 工作区和暂存区文件的区别

    例如我们在上面的test.txt文件中再增加一行

在这里插入图片描述

  1. 暂存区中尚未commit的和已经commit的文件的区别

    接下来我们将工作区中增加了一行的test.txt添加到暂存区中

在这里插入图片描述

现在我们最新改动的test.txt添加到了暂存区,但是尚未提交到当前分支,刚才我们已经提交了一个版本的test.txt到当前分支,现在我们可以看看这两个文件的区别(注意使用git diff test.txt是没有用的)

在这里插入图片描述

显示暂存区和上一次提交(commit)的差异: 
$ git diff --cached [file]
或
$ git diff --staged [file]

一般情况下,git add和git commit可能就够处理日常的代码提交了,但是考虑以下几种情况,可能还需要撤销一些改动和提交。

文件改错了,想撤回恢复原状,这个时候分为三种情况

  1. 你修改了本地文件,未添加到暂存区,想将本地的文件恢复原状

    执行 git checkout . 或者 git checkout – <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件

    注意:这个操作很危险,会清除工作区中未添加到暂存区中的改动,确保你本地的改动不想要了或者已经备份了本地的改动,再执行该命令

    另外还有一点,如果是本地新增的一个文件,暂存区中并没有,那么git checkout是不会对此文件有任何效果的,如果你不想要这个文件了,手动删除即可。

    "–"很重要,不加的话就变成了切换分支的命令。

    考虑一种情况:工作区的修改在之前已经添加到暂存区,现在又做了修改,checkout命令只能回到上一次添加到暂存区后的状态,并不能撤回上一次添加到暂存区的操作(想要撤回那就是下面这种情况);

  2. 你修改的文件被添加到了暂存区,但尚未提交到当前分支

    我们继续上面的例子,增加了一行数据的test.txt被添加到了暂存区,尚未提交到当前分支,可以通过执行git reset HEAD来丢弃暂存区的修改

在这里插入图片描述

但是其修改的原理是:使用当前分支指向的目录树刷新暂存区的目录树,执行完该命令后,我们第一次commit到当前分支的test.txt状态和内容不会改变,工作区的内容同样不会改变。

如果需要提交本地的修改,那就再次add、commit;如果工作区的代码你也不想要了,那就回到了第1点。

  1. 你修改的文件已经提交到了当前分支,但尚未push到远程分支:

    其实通过上面的学习,我们可以绘制出这样一个流程图

在这里插入图片描述

上面第2种情况中提到如果代码添加到了暂存区尚未提交到分支,可以通过reset来恢复暂存区,那么当代码已经提交到了分支之后,无论怎么reset,都是没有用的,那么究竟应该怎么做?

符合这一条件的就是第一次commit到当前分支的test.txt,我们以这个文件为例来实现。

不过这里同样需要使用reset命令,利用其 –soft 参数,可以回退到某个版本:

第一步:执行git log 定位commit xxxadsfdgfngffdhfj2435465fdfdfwe (commitid),一般选择本次提交前的上一个版本即可

第二步:git reset --soft commitid 回退到这一版本

在这里插入图片描述

这个时候之前提交到分支的test.txt文件被从当前分支中移除,目前处于暂存区,想要继续撤销的话就可以使用git reset HEAD,也就是回到上面的第2点。

问题1:那么有没有丢弃本次提交到分支的内容并且同时清空暂存区的方法呢?

有,那就是git reset HEAD^,此时工作区的改动不会受到影响

假设我们有test1.txt和test2.txt已经提交到了当前分支

在这里插入图片描述

git reset HEAD^            # 回退所有内容到上一个版本  
git reset HEAD^ hello.php  # 回退hello.php的版本到上一个版本  
git reset  052e           # 回退到指定版本

可以看到,此命令相当先reset到上一个版本,然后git reset HEAD。

问题2:那么有没有丢弃本次提交到分支的内容并且同时清空暂存区,并且恢复工作区到与暂存区一致的方法呢?

有,那就是git reset --hard HEAD^,这里HEAD^表示上一个版本,如果命令中使用HEAD是没有用的,因为改动已经提交,当前的改动就是最新版本。

假设我们有test1.txt和test2.txt已经提交到了当前分支,并且又分别在这两个文件末尾增加了两行改动,现在执行该命令
在这里插入图片描述

执行完我们可以发现,工作区的这两个文件直接被删掉了,而不是丢弃最新的一次修改,所以你应该能够明白,"–hard"参数不要轻易使用,除非在你确定工作区的所有改动都不想要了或者已经备份的情况下再使用。

可以看到,此命令相当于先reset到上一个版本,然后git reset HEAD,最后又执行了git checkout .,区别点在于,如果提交的工作区文件是较上个版本新增加的文件,git reset --hard HEAD^会把工作区新增的文件也给删掉,而如果先执行git reset HEAD^再执行git checkout .则不会删掉新增的文件;如果改动的是上一个版本中就已经存在的文件,那么两种方式就没有区别,最终都会将相比上个版本的所有改动丢弃。

如果工作新增了文件,但从未添加到过暂存区,则无论是checkout还是reset --hard都不会对其造成影响。

HEAD 说明:

  • HEAD 表示当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本
  • HEAD^^^ 上上上一个版本
  • 以此类推…

可以使用 ~数字表示

  • HEAD~0 表示当前版本
  • HEAD~1 上一个版本
  • HEAD^2 上上一个版本
  • HEAD^3 上上上一个版本
  • 以此类推…

问题3:当改动尚未提交到当前分支,已经添加到了暂存区,有没有同时清除暂存区和工作区改动的方法呢?

同样也是有的,就是git checkout HEAD .git checkout HEAD file,同样是利用checkout,但是多加了一个HEAD, 它就会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。

假设我们有个README文件(上个版本中已经存在),现在我们在工作区进行了修改,并添加到了暂存区。

在这里插入图片描述

执行完之后,我们发现暂存区被清空了,而且工作区的改动也被丢弃了。

现在我们再假设工作区新建了一个test.txt文件(上个版本中并不包含),现在我们将其添加到暂存区。

在这里插入图片描述

可以发现这种情况下,使用checkout是无法起作用的,新增加的test.txt依然在暂存区中,这个时候git reset --hard HEAD就派上用场了。

在这里插入图片描述

执行完可以发现暂存区和工作区中的test.txt都被清理掉了。

通过以上的学习可以发现,checkout无法处理新增的文件,reset --hard可以处理新增的文件。

文件删除

在工作中我们也会遇到需要删除线上的部分文件的场景,那么我们首先需要在工作区和暂存区中删除,然后commit给分支,最后再push到远程分支。

这个时候就需要使用git rm <file>命令

假设我们工作区有一个README文件,并且在上一个版本中就已经有该文件,我们执行git rm README.md之后,会发现工作区中没有该文件了,查看状态会发现暂存区中也删除了该文件,待提交到分支(所以如果你想把远程分支上的该文件也删除,还需要commit和push)。

在这里插入图片描述

其实上面的操作基本已经可以解决工作中绝大多数的问题了,不过考虑一种情况,添加了较多文件到暂存区准备提交,然后多添加了个别并不打算提交的文件,然后又并不想通过上面那种撤销的操作来解决,那同样可以使用这里提到的文件删除操作。

我们同样也是分为两种情况来讨论

  1. 工作区新建了文件,但未添加到暂存区,不想要这个文件了,那随便删,不想要任何git命令;

  2. 针对上个版本已有的文件进行了修改,并添加到了暂存区,但是现在想从线上删除该文件,理论上这种情况不存在对吧,既然不要了也不会改,既然改了那应该不会想从线上删除该文件,不过即使存在这种情况,可以使用下面第3点一样的方法来解决;

  3. 工作区新建了文件,并添加到了暂存区,想要删除该文件;

    假设新建了test.txt文件,并添加到了暂存区,然后我们将工作区的test.txt删掉,看下会发生什么

在这里插入图片描述

暂存区的test.txt依然存在,正在等待commit,然后还提示工作区删掉了test.txt并未同步到暂存区,可以通过git add/rm test.txt来同步给暂存区。

我们接下来执行这两个命令的任一个肯定是可以删掉暂存区中的test.txt的,但是实际上如果使用git rm的话,无需先手动删除工作区的test.txt,但是因为test.txt文件是新建的文件(或者其他已有的文件进行了修改,新建也可以理解为修改),需要使用-f参数,也就是force强制删除。

删除命令:git rm -f test.txt

那现在还有个问题,这样直接把我们工作区新建的文件并且写的代码都给删掉了,我并不想删啊,我只是这次不想提交,那就使用--cache参数只删除暂存区,仍然保留工作区的改动。

假设我们在工作区新建了test.txt并添加到了暂存区

在这里插入图片描述

可以看到这时只删除了暂存区的test.txt,工作区的依然还在。

远程操作命令:介于版本库和远程仓库之间

远程操作

git remote:用于在远程仓库的操作

git remote -v:显示所有远程仓库

在这里插入图片描述

origin为远程地址的别名,也可以叫远程主机名,命令中使用的[alian]标志表示别名的意思。

显示某个远程仓库的信息,show后面也可以远程仓库的url

在这里插入图片描述

这里告诉我们远程有dev和main分支,本地也有dev和main分支。

那么这里为啥我们没有master分支呢,实际上后来github上已经将master分支更名为main分支,本质就是一个名称,没有什么区别,后面对于所有出现的main或master分支是等价的

拉取远程代码

git fetch:用于从远程获取代码库, 该命令执行完后需要执行 git merge 远程分支到你所在的分支。

现在我们测试将远程的main分支拉到本地,拉之前先修改一下远程main分支的README文件内容,方便后续对比变化。

拉取代码的语法规则是:git fetch [远程地址名] [分支名],分支名不写的话默认为master分支(这里和GitHub上你设置的默认分支有一致),远程地址名不写默认应该是origin。

在这里插入图片描述

以上信息"f564186…9cc37d5 main-> origin/main" 说明 master 分支已被更新,接下来我们使用merge命令将更新同步到本地,这里本地指的是本地版本库以及工作区。

合并代码

合并代码的命令语法是:git merge 远程地址名/分支名
在这里插入图片描述

命令执行结束查看当前分支的本地工作区文件已经被同步修改。

origin master表达的意思是:git服务器(origin代表)上的master分支。
origin/master表示本地分支(本地的远程分支),是从远程拉取代码后,在本地建立的一份拷贝,需要merge后才能更新当前分支的代码版本。

拉取并合并

git pull: 用于从远程获取代码并合并本地的版本,其等价于fetch+merge,使用语法

git pull 远程主机名 远程分支名:本地分支名

将远程主机 origin 的 main分支拉取过来,与本地的 dev分支合并。

git pull origin main:dev

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

git pull origin main

上面命令表示,取回 origin/main分支,再与本地的main分支(假设当前分支是main)合并。

当然也有简写的版本(一般不是很建议过多去记省略的版本,容易出错)

从origin的默认分支(一般是master,可以在GitHub上改)拉取过来,然后与当前分支合并

git pull origingit pull

推送代码

git push:用于将本地的分支版本上传到远程并合并,命令语法:

git push 远程主机名 本地分支名:远程分支名

如果本地分支名与远程分支名相同,则可以省略冒号:

git push 远程主机名 本地分支名

注意这里与pull的区别在于,pull是从远程到本地,远程分支名在前,本地分支名在后;而push是从本地到远程,所以本地分支名在前。

以下命令将本地的 master 分支推送到 origin 主机的 master 分支。

git push origin master

等价于

git push origin master:master

简化版本:git pushgit push origin

将当前分支的内容推送到远程与当前分支同名的远程分支名,例如当前分支为dev,则是从本地dev分支推送到远程dev分支。

分支管理

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

Git 分支实际上是指向更改快照的指针。

查看分支

git branch

新建分支

git branch 分支名称

切换分支

git checkout 分支名称

上面也有用过checkout,用来清空工作区的改动,注意使用的区别

合并分支

git merge 分支名

删除分支

git branch -d 分支名

这个命令是把指定的分支合并到当前分支,上面我们把origin/master分支合并到当前分支也是用的merge,且用法一致。

下面我们使用一些例子来理解分支

已知我们现在已经有两个分支main和dev,现在我们切换到dev分支,然后新建一个文件test1.txt并提交。

在这里插入图片描述

然后我们切换回main分支会发现工作区又回到了原来的样子,刚才在dev分支新建的文件不见了,切换回dev分支的话,test1.txt又会出现。

使用分支将工作切分开来,从而让我们能够在不同开发环境中做事,并来回切换。

在这里插入图片描述

如果在dev分支新建了文件没有提交,无论添加没添加到过暂存区,那么切换分支后是可以看得到的。

我们在dev分支新建了test1文件,将他合并到main分支

git merge dev

这样main分支也就有了test1.txt文件,假设dev分支开发已经结束,可以将其删除。

在这里插入图片描述

这里提示说dev没有完全merge,确认删除使用"-D"参数。

Diverge 分支分化问题

Diverge的主要原因是因为没有同步服务器端最新的代码就commit,设想服务器端已经有新的提交(其他同事更新了代码),但是你并没有同步,然后直接commit代码,这个时候你的分支代码与服务器端分支代码是不同的,当你push时肯定会出问题。
正确的流程应该是:先将本地代码同步为最新,再add,commmit和push。

如果出现Diverge问题,解决办法:
方案一:

  1. 先备份本地修改的未提交的代码;
  2. git fetch origin;
  3. git reset --hard origin/master

这种解决办法的原理是,先将本地的代码同步为服务器端的最新代码(fetch),这时候origin/master分支就是从远程拉过来的本地分支,然后使用reset命令和--hard参数覆盖本地版本库和工作区。

处理完之后可以再将修改的文件添加进来,重新提交,可以看出方案一的做法比较保守,也比较安全,适合新手。

方案二:

  1. git fetch origin
  2. git merge origin/master

第2步很有可能出现冲突,若出现冲突就解决冲突。

冲突解决

这里举个简单的例子解决冲突,假设我们的main分支test文件的内容如下

first line
second line
third line
end line

dev分支的test文件内容如下

first line
third line
second line
end line

将两个分支所做的改动都提交后,将dev分支的内容merge到main分支

在这里插入图片描述

提示告诉我们发生冲突了,无法完成自动merge,需要手动处理之后再提交,我们打开test文件看一下

first line
<<<<<<< HEAD
second line
third line
=======
third line
second line
>>>>>>> dev
end line

这里告诉我们"<<<“和”===“之间包括的内容与”===“和”>>>"之间包括的内容冲突,需要你确定下到底怎么保留,考虑到实际工作场景可能两边的代码都是需要的,所以我们这样处理

first line
second line
third line
third line
second line
end line

处理完之后,我们需要git add和git commit和push。

这个时候main分支冲突问题解决了,但是要注意dev分支和main分支还是有区别的,如果这一阶段的开发完成了可以删除dev分支;或者将main分支合并到dev分支以同步修改(如果你需要的话)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/400411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java基础 下】 031 -- 反射 动态代理

一、什么是反射&#xff1f; 换句话说就是&#xff08;从类里拿出来&#xff09; 可以获取到&#xff1a;&#xff08;利用反射&#xff0c;我们可以获取到类中所有的东西&#xff09; 获取是先从class字节码文件中获取的 二、获取class对象的三种方式 三种方式也对应了三种阶段…

Unity之Addressable使用注意事项

基本设置 Profile文件中配置资源构建路径和资源首次加载路径&#xff0c;资源如何设置了缓存&#xff0c;在首次加载之后会将再用缓存在缓存目录&#xff0c;后面将直接从缓存目录中读取&#xff0c;RemoteLoadPath一般要设置成可以动态修改类型的参数&#xff0c;方便项目发包…

[oeasy]python0104_指示灯_显示_LED_辉光管_霓虹灯

编码进化 回忆上次内容 x86、arm、riscv等基础架构 都是二进制的包括各种数据、指令 但是我们接触到的东西 都是屏幕显示出来的字符 计算机 显示出来的 一个个具体的字型 计算机中用来展示的字型 究竟是 如何进化的 呢&#xff1f;&#x1f914;&#x1f914; 模拟电路时…

在线客服机器人是什么?有什么用处?

在线客服机器人是客服自动智能问答 真人模拟应答以及意向分类 高效低成本可以同时进行一对多服务&#xff0c;而在一些情况下&#xff0c;在线客服机器人还可以进行客户接待&#xff0c;完全代替人工客服&#xff0c;提高整个客服中心的接待量。在这里我们拿ttkefu在线机器人为…

Spring学习——Maven进阶

分模块开发与设计 创建模块 书写模块代码 通过maven指令安装模块到本地仓库(install指令) 在pom.xml中导入坐标执行maven的install命令将模块安装到本地maven仓库 团队内部开发可以发布模块功能到团队内部可共享的仓库中&#xff08;私服) 依赖管理 依赖指当前项目运行所需…

JAVA SE:多线程

一、线程简介多任务&#xff0c;看似同时在做&#xff0c;实际上同一时间只做一件事多线程&#xff0c;相当于路上多加一条车道普通方法vs多线程&#xff1a; 程序、进程、线程&#xff1a;程序&#xff1a;静态的概念&#xff0c;程序和数据的有序集合进程&#xff1a;操作系统…

CleanMyMac X4.20最新Mac系统垃圾清理工具

CleanMyMac X是一款Mac系统垃圾清理工具,可以清除Mac系统多余的语言包、系统缓存、应用程序、PowerPc软件运行库等,是硬盘瘦身的好工具。在面对一款多功能型的软件时&#xff0c;复杂的操作面板是最容易让人头疼的&#xff0c;好在 CleanMyMac 一直以来都原生支持简体中文语言&…

python第五天作业~基础练习

目录 求十进制数字9的二进制编码&#xff1a; 求十进制数字9的二进制编码中的1的数量&#xff1a; 作业15&#xff1a;求1~100之间不能被3整除的数之和 作业16&#xff1a;给定一个正整数N,找出1到N&#xff08;含&#xff09;之间所有质数的总和 作业19&#xff1a;计算PI&…

为什么那么多人转行编程都首选Java

计算机专业通常从C语言开始学&#xff0c;非计算机专业想要转行编程首选Java的主要原因&#xff1a;市场需求量大。Java可以用于开发各种应用程序&#xff0c;包括企业级Web应用程序、移动应用程序、桌面应用程序、游戏、嵌入式系统、云基础设施等等。在游戏领域也有两大经典游…

Meta带头甩卖 VR头显打起价格战

新春三月&#xff0c;准备入手VR头显的“等等党”终于迎来降价利好。以Meta为首的一众VR厂商们纷纷打折&#xff0c;无论是为了清理库存、回收成本还是让步硬件新品&#xff0c;普通消费者都喜闻乐见。 上周五&#xff0c;Meta 率先官宣Meta Quest Pro与Meta Quest 2 的256GB版…

效率工具-快速创建虚拟机,Vagrant真香!

工欲善其事&#xff0c;必先利其器&#xff0c;开发环境和开发工具就是我们开发人员的剑&#xff0c;所以我们需要一个快并且好用的剑。本文是向大家介绍虚拟机创建vagrant&#xff0c;它能够实现开发人员本机快速创建虚拟机&#xff0c;能够带来高效学习各种技术价值。1 Vagra…

我的投稿之旅

一、铁道科学与工程学报选择这个期刊的原因是&#xff1a;感觉影响因子较低&#xff0c;而且实验室有师兄师姐中过这个期刊&#xff0c;所以抱着试一试的心态投了。投稿之前需要去官网注册账号由于方向不一致&#xff0c;被退稿了“您的稿件内容不属于本刊刊载范畴&#xff0c;…

Content-Type (MIME) el-upload文件、图片上传 | 文件改名 | 大文件 | 文件下载

MIME 为数据格式标签&#xff1b;最初 MIME 是用于电子邮件系统的&#xff0c;后来 HTTP 也采用了这一方案。 在HTTP协议消息头中&#xff0c;使用Content-Type来表示请求和响应中的媒体类型信息。 Content-Type&#xff1a;type/subtype ;parametertype 主类型&#xff0c;任…

【LeetCode每日一题】——135.分发糖果

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 贪心算法 二【题目难度】 困难 三【题目编号】 135.分发糖果 四【题目描述】 n 个孩子站成一…

【论文研读】无人机飞行模拟仿真平台设计

无人机飞行模拟仿真平台设计 摘要&#xff1a; 为提高飞行控制算法的研发效率,降低研发成本,基于数字孪生技术设计一个无人机硬件在环飞行模拟仿真平台。从几何、物理和行为3个方面研究无人机数字模型构建方法,将物理实体以数字化方式呈现。设计一种多元融合场景建模法,依据属…

Java--JMH--性能测试--测试软件运行效率/时间--StopWatch

写在前面: 很多时候想要测试代码运行时间&#xff0c;或者比较2个运行的效率。 最简单的方法就是Sytem.currentTimeMillis记录2开始和结束时间来算 但是Java 代码越执行越快&#xff0c;放在后面的方法会有优势&#xff0c;这个原因受留个眼&#xff0c;以后研究。大概有受类加…

RedisCluster集群模式下master宕机主从切换期间Lettuce连接Redis无法使用报错Redis command timed out的问题

背景springboot使用redisTemplate访问redis cluster&#xff08;三主三从&#xff09;&#xff0c;底层是Lettuce&#xff0c;当其中一个master挂掉后&#xff0c;slave正常升为master&#xff0c;程序报错 Redis commond timed out after 6 seconds。解决手动连接集群&#xf…

【三维几何学习】网格上低分辨率的分割结果到高分辨率的投影与可视化

网格上低分辨率的分割结果到高分辨率的投影与可视化引言一、到高分辨率的投影1.1 准确率1.2 主要代码1.3 投影核心代码二、可视化代码引言 三角网格的结构特性决定了其仅用少量三角形即可表示一个完整的3D模型。增加其分辨率可以展示更多模型的形状细节。对于网格分割来说&…

可复用测试用例描述要素

测试用例的输入、操作、预期结果和评估标准、前提条件是测试用例不可少的要素&#xff0c;但对于可复用测试用例而言&#xff0c;这是不够的。本文在文献规定的测试用例要素基础上&#xff0c;增加了新的内容。从而从多个角度完整地对可复用测试用例进行了描述&#xff0c;为可…

从0开始学IntelliJ Plugin开发:一、配置环境

前言 作为一个javaer&#xff0c;相信大家平时开发都多多少少使用了一些idea的插件&#xff0c;那么在享受插件便利的同时&#xff0c;有没有好奇插件是如何开发的 笔者怀着这份好奇开始了idea插件开发学习之路&#xff0c;同时把学习的心得体会整理成系列文章作为学习笔记供…