Git和GitHub基础教学
文章目录
- 1. 前言
- 2. 历史
- 3. 下载安装Git
- 3.1 下载Git
- 3.2 安装Git
- 3.3 验证安装是否成功
- 4. 配置Git
- 5. Git基础使用
- 5.1 通过Git Bash使用
- 5.1.1 创建一个新的仓库。
- 5.1.1.1 克隆别人的仓库
- 5.1.1.2 自己创建一个本地仓库
- 5.1.2 管理存档
- 5.2 通过Visual Studio Code使用
- 6. Git完成远程提交
- 6.1 Git Bash版本
- 6.2 Visual Studio Code版本
1. 前言
当你写代码的时候一定遇到过自己需要对代码进行很多改动,结果改动完发现有很多报错,于是我们想回到之前的某个状态的代码的情况。如果是本地的一些项目我会对代码进行一个“存档”的操作(很多游戏会提供存档的选项从而保存玩家的进度,玩家可以“读档”从而恢复到该存档所保存的进度),我会将我的代码ctrl+a然后ctrl+c,打开我的记事本ctrl+v,完成了一遍存档,如果我需要保存新的我只需要再打开一个新的。如果我想要读取某个存档,我只需要将记事本的代码放到我的ide中。
这就是一个简单的代码存档管理,我们可以将我们的代码的一些“关键点”进行保存,然后当我们的代码出现一些问题的时候,我们可以读取这些“关键点”,返回到之前的进度重新进行改动。
但是这是我们一个人写我们自己的代码,万一是一群人在一起进行一个合作,我们该怎么做呢?我们使用u盘互相传一下我们的代码吗?这个方案当然是可以的,但很明显有问题,效率比较低,你的团队人越多,进行u盘同步进度的效率就会很慢。那我们就将各自的存档都上传到一个大家共享的网盘上吧。很快就会出现第一个问题:你们写的是一个python代码,这些网盘里的存档都叫import numpy…你自己只能在本地找到自己的代码,上面的很多存档你看着会一头雾水。还会有其他问题:这么多存档,到底哪个是正式的最后的代码?这里有的模块可能代码没有添加,或者有些需要添加进去的但是和其他代码有些冲突,一个代码和另一个代码到底有什么区别,这些都是可能出现的问题。
对于第一个问题,问题主要是没有统一的规则,万一代码出现问题我们可能都不知道这个代码是谁写的,谁上传的。所以最好这里存档能有时间和上传者的记录,甚至为了解决后面说的代码之间的改动,这个上传者最好自己稍微阐述一下我做了什么。
第二个问题,这里有很多代码,一般来说每个人会做一个模块,然后我们最后讲这些模块放到一起形成最后的代码,因此最后应该有一个人将这些模块的代码进行一个检查。检查没有问题就放进最后的代码之中,如果放进去后有问题也没有关系,因为之前的代码有存档。所有的代码都加进来之后,那我们的最后这个版本就确定了。
第三个问题,如果合作之中的代码之间有一些冲突,最好这些冲突能被标记出来。就像游戏里两个存档可能有不同的道具,有一种同步方案那便是两边的东西都保存,也可能是最后是保存某一种存档。
那这些功能都是可以被Git实现的,这篇文章就将以游戏存档的例子给大家介绍Git的使用。
2. 历史
Git的历史要从Linux之父Linus Torvalds说起。
Linus Torvalds作为Linux之父,当然生完孩子Linux后就不能放任不管了,所以在 2002 年之前,Linux内核的维护工作主要依靠Linus Torvald等人手工检查全球各地热心开发者们提交的补丁,审核通过后就会将其手动加到Linux代码之中,这种方式效率低下且容易出错。因此Linus Torvalds等人需要找到一个解决方案。
下图是Linux之父Linus Torvalds。

这个解决方案便是版本控制系统软件,也就是前文中我们说的那种解决方案。当时Linus Torvalds选择了BitKeeper来解决问题,但是这款软件是一个商业收费软件,2005年后该公司BitMover决定收回Linux内核社区的免费使用权。
数次磋商无果后,Linus Torvalds作为暴躁老哥就表示,不能办就别办了。二话不说撸起袖子就干,花了10天时间,开发了一个开源免费的版本控制系统软件——Git,意思为“不愉快的人”,直接取代了BitKeeper,成为了当今世界上最为流行的版本控制工具。

3. 下载安装Git
3.1 下载Git
首先打开Git官网:Git官网
点击这里的Download for Windows,这里的教学以默认的命令行界面git为例,下面的GUI版本提供了一个图形用户界面,使得用户可以通过点击和选择来管理Git仓库,而不需要手动输入命令行指令,该教程不会聚焦于GUI版本。

点击后,会有多个版本进行安装,上面的Standalone Installer是独立安装程序,通过运行安装程序来安装Git,它会在系统中创建相应的程序和环境变量,因此适合我们现在的需求。
而下面的Portable是便携版,一般是如果我们需要放在一些移动介质所需要的版本,它的安装过程不会将Git添加到系统目录中,而是将所有文件都放在安装目录中。便携版可以在没有安装过程的情况下直接运行,因此适合携带在便携式存储设备(如USB闪存驱动器)中使用,方便在不同计算机之间使用Git。
所以这里我们点击64-bit Git for Windows Setup就好了。

但是这里的下载速度会比较慢,可以科学上网解决。
3.2 安装Git
下载完后,我们点开对应的安装包,点击Next。

然后是选择安装目录,这里需要注意安装目录里不能有中文。
然后点击Next进入下一步。

这一步可以不修改上面的选项,直接点击Next下一步。
1.Additional icons(附加图标):是否在桌面上创建 Git 的快捷方式图标。
2.Windows Explorer integration(Windows 资源管理器集成):
Open Git Bash here(在此处打开 Git Bash): 是否在右键菜单中添加“在此处打开 Git Bash”选项。
Open Git GUI here(在此处打开 Git GUI): 是否在右键菜单中添加“在此处打开 Git GUI”选项。
3.Git LFS (Large File Support)(Git 大文件支持):
是否安装 Git LFS 插件,用于支持大文件的版本控制。
4.Associate .git configuration files with the default text editor(将 .git 配置文件与默认文本编辑器关联)**:
是否将 .git 配置文件与系统的默认文本编辑器关联。
5.Associate .sh files to be run with Bash(将 .sh 文件与 Bash 关联):
是否将 .sh 脚本文件与 Git Bash 关联,以便可以直接运行。
6.Check daily for Git for Windows updates(每天检查 Git for Windows 更新):
是否每天检查 Git for Windows 的更新。
7.(NEW!) Add a Git Bash Profile to Windows Terminal(将 Git Bash 配置文件添加到 Windows 终端):
是否在 Windows 终端中添加 Git Bash 配置文件。

这一步是创建开始菜单文件夹,也是直接点击Next就好。

这一步是选择Git的默认编辑器,这里建议修改成Visual Studio Code,后文也将会以Visual Studio Code为例,选择自己常用的ide即可,然后点击Next。

这一步是设置新仓库中初始分支的名称,上面是Git默认的master分支,下面可以是你自己选择的分支名,一般是main,这里现在推荐你直接选择下面的这一个就好,后面环节会对这里再进行详细解释。

后面的设置几乎不变,一直点击Next就好。
这一步是对PATH环境的调整。







这里点击Install即可。

点击完后等待其安装完毕。
这里点击Finish后因为这里默认勾选了发行文档,所以我们可以取消勾选后,点击Finish。上面的一个选项是启动Git Bash,这是Git的命令行工具,我们暂时不需要从这个地方打开。

3.3 验证安装是否成功
验证的方式有两种,一种是我们直接打开我们的Visual Studio Code,点击左边第三个后,如果出现的是不是让你安装Git便是成功,比如我这里已经打开了项目,所以这里提示我让我Initialize Repository(初始化仓库)。

当然如果你的Visual Studio Code是启动的过程中安装的Git,你可能需要关闭Visual Studio Code再打开一遍才可能会识别到安装的Git。
第二种方法是我们在桌面上右击,然后如果点击后没出现以下的界面,则还需要点击显示更多选项,然后就应该会出现下面的界面,然后这里便有Open Git GUI here和Open Git Bash here这两个选项,就说明我们的安装成功了。

4. 配置Git
配置Git的方法有很多,这里主要是为了后续上传我们前面说的代码存档,需要进行一个小小的设置。官方教程中也推荐你进行这一步的设置,也就是设置Git用户名和电子邮件地址。
Git官方文档/书籍
这里的电子邮箱地址建议先去GitHub官网上注册一个账号,然后这里的电子邮箱就是GitHub上注册账号的邮箱,这样的话会方便我们前面说的团队合作场景中,大家互相方便沟通。
GitHub官网
注:GitHub也需要科学上网才能流程使用。
我们在桌面上右击后,点击显示更多选项,再点击Open Git Bash here,就会出现Git的命令行工具。
如下图所示。

我们需要输入的命令格式如下。
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
其中的John Doe可以改为自己的用户名,邮箱也可以改为自己的邮箱。

提示:在这里想粘贴需要右击后点击Paste,或者我们右击后看到这里的Paste快捷键,并不是传统的ctrl+v
至此我们就完成了Git的配置。
5. Git基础使用
Git使用的方式主要是两种,一种是通过Git Bash输入命令进行使用,一种是我们使用Visual Studio Code自动使用Git。
5.1 通过Git Bash使用
5.1.1 创建一个新的仓库。
第一步我们需要创建一个新的仓库(Repository),为什么需要一个仓库呢?我们玩游戏的时候开始新的游戏就会创建一个新的存档,就像我们玩游戏新游戏也是会让你选择一个存档位置一样,我们的一个项目开始也就会有一个存放存档的仓库,一个游戏我们可以有多个存档,可能是多个人游玩导致的,因此这些存档有不同的存档位置,因此就是不同的仓库。
一般来说一个项目是最大的,其下面可能会有多个仓库,每个仓库之中会有多个存档。
5.1.1.1 克隆别人的仓库
当然我们有的时候可以下载网上的存档直接进行游戏,我们也可以直接拿别人的仓库过来直接开始项目,这种操作叫做克隆(clone)。
我们在本地选择好要存储的地方,然后右击后选择显示更多选项,然后点击Open Git Bash here。

然后我们去GitHub上选择一个项目点击Code,然后选择下面的复制地址。

在Git Bash里输入命令。
git clone (加上刚刚的地址)
这里复制和前面说的一样建议直接右击Paste,因为默认快捷键不是ctrl+v。
再按下回车后,Git就会把对应的仓库直接全部下载下来。


5.1.1.2 自己创建一个本地仓库
我们还是要打开对应的我们想创建仓库的文件夹,然后右击后选择显示更多选项,然后点击Open Git Bash here。

然后输入命令。
git init
再按下回车。

我们的文件夹里便会有一个.git文件夹,这个便是我们的代码仓库了,这里面的东西千万不要动。

如果你无法看见这个文件夹,可能是你没有开启显示隐藏文件夹,点击上面的查看,然后点击显示,勾上隐藏的项目即可。

5.1.2 管理存档
我们现在有了存档之后,我们开始书写我们的代码,我今天写了个1.txt进去,现在我想保存以下我目前的进度。

这里虽然1.txt在这个文件夹,但其实还没有放进仓库之中,因此我们现在需要在Git中提交我们这个存档到仓库之中。

我们打开这里的Git Bash,输入以下命令。
git add 1.txt

但这一步只是暂时将这个文件放到暂存区,可以理解成存档放进仓库需要先拿一个盒子将存档装起来,再放到仓库里。
当然如果这里有很多个文件的话,你也可以输入以下命令,会将所有文件放入暂存区。
git add .
注意这里.和add之间有空格。

我们现在存档已经打包好,我们需要将这个存档上交到仓库去了,执行下面命令。
git commit -m "(备注内容)"

这样代码就被我们成功添加到了仓库之中。
我们现在就会有保存好的存档在仓库之中,我们可以输入以下代码去检查这些存档。
git log

这里就能发现上面不仅有提交的记录,记录上还会有时间提交人等信息,帮助我们溯源,如果这份代码有问题,我们就可以找到对应负责的人。
我们还可以输入以下命令,检查每次提交修改了哪些文件。
git log --stat

我们发现每次存档还会有一个存档ID,也就是黄色字的那一行,我们可以使用这个ID去查看每次存档提交与之前的存档有哪些地方不同。
输入以下命令。
git diff (commit ID)
这里可能的结果比较抽象,但是如果我们使用下一种方法使用Git就可以清楚的看到代码前后的差异。
那么如何读取之前的存档,让我们的代码回到之前的保存节点呢?我们可以输入以下的两行命令中的任意一个。
git reset --hard [commit ID]
git checkout [commit ID]
这两行代码的区别在于是否会影响暂存区或当前分支的HEAD,上面会将工作目录和暂存区(staged area)也更新到该提交的状态,而下面的不会影响。
我们前面提到了很多分支一词,我们在前面创建完仓库后,我们现在每一行命令都会有一个括号(main),其实表示的就是我们现在的所有操作都在main这一个分支下,分支是什么呢?
我们前面说过,我们可能有多个人开发的代码,这些代码之间互相可能会有冲突或者问题,所以这些当然不能是直接放到原来的代码之中的,我们之前安装的时候选择了默认的分支名,因为修改成了main所以现在创建完仓库后,Git会帮我们创建这个默认分支main,当我们如果发现某一分支没有问题的时候,我们可以再将这个分支合并到main中,我们以后会详细演示这个过程。
相关的命令如下。
git branch new-feature
git checkout branch-name
git checkout -b new-branch
git merge branch-name
git branch -d branch-name
git branch
1.创建分支:
你可以从当前分支(通常是 main 或 master)创建一个新的分支。例如,使用 git branch new-feature 命令创建一个名为 new-feature 的新分支。
2.切换分支:
使用 git checkout branch-name 命令可以切换到指定的分支。如果分支不存在,这个命令会失败。
3.创建并切换分支:
git checkout -b new-branch 命令会创建一个新的分支,并立即切换到这个新分支。
4.合并分支:
当你在分支上完成开发后,可以使用 git merge branch-name 命令将该分支的更改合并到当前分支。
5.删除分支:
使用 git branch -d branch-name 命令可以删除一个已经合并到其他分支的分支。如果分支还没有合并,可以使用 -D 选项强制删除:git branch -D branch-name。
6.分支管理:
git branch 命令可以列出所有的分支,其中当前分支会用星号 * 标记。
5.2 通过Visual Studio Code使用
我们在IDE中完成对应的代码操作后,我们点击左边的第三个Source controls,点击后由于我们这里没有创建对应的仓库,所以这里的第一步当然是创建仓库。

我们直接点击Initialize Repository创建仓库,点击后界面就会变成这样。

和前面一样我们现在需要将代码进行一个存档的保存并提交。与前面不同的是这里它直接出现的是Commit也就是提交到仓库之中,没有前一步添加到暂存区的操作。然后这里的commit上面我们也可以输入对应的备注信息在文本框中。
注意我们提交之前之前记得要保存一下文件,可以使用ctrl+s快速保存,在Visual Studio Code中,如果你的文件没有保存,其右边会出现一个小圆点,比如前两张图的1.txt右边有个小圆点,而下面的图没有,代表这个文件已经被我保存了。
那这个旁边的U是什么意思呢?这表示该文件是unstaged的,即它已经被修改但还没有被添加到暂存区。但没有关系我们这里直接点击commit。

这里也会出现一个弹窗提示我们没有将存档先添加到暂存区中。

我们这里直接点击Always就好,这样它就会默认直接将东西帮我们放进暂存区然后再提交了。

然后我们的左下的这个Graph就会显示我们有多少次提交,以及这些提交之间的关系。
比如我们现在再次修改这个代码,我们右边的这个图标又会出现一个1的下标,提示我们有一个未提交到仓库的文件。

我们这边再次提交后,Graph下面就会出现新的提交记录。

然后这个记录和原来的记录有一个线连起来,表示它是从原来的那个存档上演变过来的,我们点击后,右边会出现一个类似编辑器的界面,但是这里不能修改(只读),这里显示的绿色部分就是我们新添加的内容,也就是这两个存档之间的不同的地方,就这样被清晰的展示出来了。

这个地方展示了一个新的存档,这个存档对原来的存档进行了删除,红色部分展示了删除了哪些内容,然后绿色部分是其新添加的内容,也就是前面Git Bash里的diff命令的结果的一个可视化展现。
当我们点击左下角main的时候就可以对分支进行编辑了。

点击后上面的搜索框会出现对应的选项,然后我们点击Create new branch。

比如这里我创建了一个新的Test分支,然后我进行了代码修改,现在打算将这两个分支进行合并。
我们按住Ctrl+Shift+P打开命令面板,再输入Git: Merge Branch命令,然后选择要合并的分支如下。

点击后,分支就完成了合并。左下的Graph上面的图标显示出main和Test分支完成了合并。

6. Git完成远程提交
6.1 Git Bash版本
我们先打开GitHub官网,然后点击自己的头像然后点击Settings。

然后点击左边的SSH and GPG keys,这里我已经添加过一个。

我们这里点击右上角的New SSH key

接下来就会进入这个界面。

现在我们就要生成SSH key了。
我们打开命令行,输入以下命令。
ssh-keygen -t rsa -b 4096 -C "你的注册邮箱"
按下回车后再按下三次回车就好。然后我们就会出现下面的界面,代表SSH keys生成完毕。

命令行的这个地方提示了SSH keys生成的地方,打开对应文件夹可以找到SSH keys。

打开对应文件夹后,用记事本打开这个.pub结尾的文件。

打开后复制里面的内容,然后回到之前的添加SSH Key界面,上面的Title随便输入一个名字就好。
然后下面的Key栏粘贴我们刚刚复制的生成的SSH key。

完成后点击下面的Add SSH key,然后会让你再输入一遍账号的密码进行确认,之后就完成了添加。
现在我们可以检查以下是否能成功建立连接,这一步同样需要科学上网。
我们输入以下命令。
ssh -T git@github.com
回车后对于下一个询问输入yes再回车即可。

出现Hi的那一行就说明SSH连接建立完毕。
现在我们先创建一个远程仓库,这个远程仓库,就相当于我们前面说的大家一起使用的网盘,本地的仓库只是在自己电脑上,别人难以访问,现在放到GitHub上之后,它就是一个网上的资源,当然你也可以设置哪些人可以访问。
我们打开GitHub页面,然后选择这里的加号,然后点击New repository。当然也可以在别的界面创建仓库,比如左边的侧栏,或者是个人仓库界面都可以创建一个新的仓库。

点击后,我们输入这个仓库的名字,下面Description一栏中可以输入这个仓库的描述,下面的Add a README file,也建议勾选。

其余选项不动后,然后点击右下角的Create repository就完成了仓库的创建。
完成创建后就只会有一个孤零零的README文件展示了这个项目是做什么的。

我们其实可以直接点击Add file添加文件,但是只能上传单一的文件,无法直接上传文件夹,而且本教程就是想教大家如何使用Git进行上传。我们这里点击Code,然后选择SSH,然后复制对应的SSH地址。

我们回到要上传的文件夹下,我们向前面的步骤一样开始操作。

当我们完成本地仓库的提交后,我们下一步就是将这个存档提交到远程仓库之中去。
我们输入以下指令。
git remote add origin (远程仓库的SSH地址)

我们输入以下指令会发现报错。
git push -u origin main

该指令是说我们将本地的main分支推送到远程仓库origin中,但是现在远程仓库有README文件,我们本地没有,这就是我们前面说的发生了冲突,我们为了解决这个问题,我们需要先拉取远程仓库的更改,以确保我的本地仓库是最新的。
我们输入命令。
git pull origin main

我们发现这里继续报错,因为这里我们都是main分支,这里引起了冲突。
由于我们这里是不同的文件,我们现在要求它们强制合并其实也不会有什么问题,因此我们可以使用下面的命令。
git pull origin main --allow-unrelated-histories

这里我们可以发现文件夹下多了原来的README文件,因为这里我们进行了强制合并。
我们再输入远程提交命令。
git push -u origin main

这里提示已经成功,我们再去GitHub上查看一下。
也成功完成上传。

这其实告诉我们正确的代码顺序,其实是先创建远程仓库,然后我们将仓库和我们的本地仓库进行同步(pull),然后我们进行代码书写,然后完成修改后,再提交到远程仓库,这才是正确的远程仓库使用顺序。
6.2 Visual Studio Code版本
Visual Studio Code版本的操作如下。
我们回到刚刚的Souce Control界面,然后点击这里的Publish Branch。

这里会弹出一个弹窗,这个弹窗会让你去登录GitHub。

这里确定是自己的账号后点击Continue即可。

然后后面会有一个正式的权限授权,继续点击Authorize Visual-Studio-Code即可。允许后面的弹窗。
回到Visual Studio Code后,这里会问你要上传到私人仓库,还是公开仓库,这就看你的具体项目情况了。

我这里选择上传到公共仓库,等待一会后,它就会上传完毕,当然这里需要科学上网。

成功后左边的Graph里的这个分支的右边会多一个云的标志,表示你的这个分支已经上传到GitHub上了。
我们打开GitHub上能看到成功上传。

当我们现在本地又有新的存档提交到仓库之中时,我们的这里云端就会落后与本地的仓库,这里的Graph也会出现左边的这种情况,我们这时候再点击左边的Sync Changes就能完成前面的Pull和Push的操作。

同样这里会提示你,这里可以选择OK,Don’t Show Again即可。

等待上传完毕,现在云端和本地又实现同步了。

这就是全部Git和GitHub的基础教学教程,一些其他复杂的实际使用这里没有详细说明,希望大家能学会Git的基础使用,能在GitHub上找到优秀的开源项目帮助到自己,在未来和别人的多人项目中做出自己的贡献。
相关文章:
Git和GitHub基础教学
文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…...
笔记六:单链表链表介绍与模拟实现
在他一生中,从来没有人能够像你们这样,以他的视角看待这个世界。 ---------《寻找天堂》 目录 文章目录 一、什么是链表? 二、为什么要使用链表? 三、 单链表介绍与使用 3.1 单链表 3.1.1 创建单链表节点 3.1.2 单链表的头插、…...
坐落于杭州的电商代运营公司品融电商
坐落于杭州的电商代运营公司品融电商 在中国电商行业蓬勃发展的浪潮中,品融电商(PINKROON)作为一家扎根杭州的新锐品牌管理公司,凭借其独特的全域增长方法论和实战经验,迅速崛起为行业标杆。自2020年成立以来&#x…...
微前端之 Garfish.js 的基础使用教程和进阶配置
前言 在现代前端开发中,微前端架构逐渐成为一种流行的解决方案。它允许将大型应用拆分成多个小型独立的子应用,从而提高开发效率和可维护性。Garfish.js 是一个强大的微前端框架,可以帮助我们轻松实现这一架构。在本文中,通过一个…...
图像的特征
图像的特征主要包括以下几类: 1. 颜色特征: 直方图:描述图像中颜色的分布。 颜色矩:通过颜色的均值、方差等统计量表示颜色分布。 主色调:图像中占主导地位的颜色。 2. 纹理特征: 灰度共生矩阵࿰…...
Spring上下文工具类
文章目录 获取ip地址请求上下文相关Spring上下文获取Bean对象 获取ip地址 public class IpUtils {private IpUtils() {}/*** 获取请求ip地址** return {link String}*/public static String getIpAddress() {HttpServletRequest request RequestContextHolderUtils.getReques…...
JSONUtil InvocationTargetException: null
使用JSONUtil时候报错,一般这时候你检查下自己代码里是不是重写了get或者set InvocationTargetException 是 Java 中的一个异常,通常在使用反射(Reflection)或动态代理(Dynamic Proxy)时抛出。它表示在调用…...
高压为什么cover不住低压的hold问题
常规下我们认为hold问题常发生在高压下,但很多情况下高压的hold无法cover低压的hold hold slack (tlaunch -tcapture) (tcqtcomb) -thold -tuncertainty (tlaunch -tcapture):代表时钟skew (tcqtcomb):代表data path的长度 thold:代表查表…...
【算法学习之路】8.栈和队列
栈和队列 前言一.简介二.题目12 前言 我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新,其他的也会陆陆续续的更新,希望大家点…...
OpenMCU(三):STM32F103 FreeRTOS移植
概述 本文主要描述了STM32F103移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_RTOS这个工程,该工程已经下载放好了移植STM32F103 FreeRTOS的所有文件 OpenMCU_RTOS工程的愿景…...
大数据 spark hive 总结
Apache Spark 简介 是一个开源的统一分析引擎,专为大规模数据处理而设计。它提供了高级API,支持Java、Scala、Python和R语言,并且包含了一个优化过的执行引擎,该引擎支持循环计算(如机器学习算法)和交互式…...
小程序开发总结
今年第一次帮别人做小程序。 从开始动手到完成上线,一共耗时两天。AI 让写代码变得简单、高效。 不过,小程序和 Flutter 等大厂开发框架差距实在太大,导致我一开始根本找不到感觉。 第一,IDE 不好用,各种功能杂糅在…...
QLoggingCategory类使用
QLoggingCategory类使用 QLoggingCategory的概述 QLoggingCategory是Qt的日志策略类;可以通过声明不同的日志策略对象来输出不同的日志信息。打印信息类型如下:宏 Q_DECLARE_LOGGING_CATEGORY(name) 定义一个返回QLoggingCategory对象函数,…...
GPU加速生信分析-宏基因组MAG去污染
Deepurify利用多模态深度语言模型来过滤污染的基因组,从而提高了宏基因组组装基因组(MAGs)的质量,并且可以利用GPU加速。 宏基因组组装的基因组 (MAG) 为使用宏基因组测序数据探索微生物暗物质提供了有价值…...
数据结构(蓝桥杯常考点)
数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…...
从0到1入门Linux
一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…...
灰色地带规避:知识产权校验API的商标库模糊匹配算法
在反向海淘或其他电商业务场景中,为了规避知识产权方面的灰色地带,开发知识产权校验 API 并运用商标库模糊匹配算法是很有必要的。以下将详细介绍商标库模糊匹配算法的设计与实现: 算法设计思路 商标库模糊匹配算法的核心目标是在给定一个待匹…...
React:类组件(中)
dangerouslySetInnerHTML React写进{}内的东西,不允许被当作代码块解析,是为了防止xss攻击和代码注入 XSS(跨站脚本攻击,Cross-Site Scripting) 是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中&…...
第六次CCF-CSP认证(含C++源码)
第六次CCF-CSP认证 数位之和(easy)思路及AC代码遇到的问题 开心消消乐(easy)思路及AC代码 画图(mid)思路及AC代码 数位之和(easy) 题目链接 思路及AC代码 既然题目要求我们输出各位…...
SpringBoot 如何调用 WebService 接口
前言 调用WebService接口的方式有很多,今天记录一下,使用 Spring Web Services 调用 SOAP WebService接口 一.导入依赖 <!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId…...
算法 之 树形dp 树的中心、重心
文章目录 重心实践题目小红的陡峭值 在树的算法中,求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义:重心是树中的一个节点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点…...
Docker 配置镜像源
》》Daemon {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me"] }》》》然后在重新 docker systemctl restart docker...
Linux 离线部署Ollama和DeepSeek-r1模型
都在复制粘贴联网状态下linux部署deepseek,离线状态下需要下载Ollama和DeepSeek模型,然后将下载包上传到linux中。 1、下载Ollama https://github.com/ollama/ollama/releases 注意:如果CentOS7建议安装V0.5.11版本,V0.5.13需要…...
SQLAlchemy系列教程:如何执行原生SQL
Python中的数据库交互提供了高级API。但是,有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射(ORM)功能而闻名ÿ…...
RuleOS:区块链开发的“新引擎”,点燃Web3创新之火
RuleOS:区块链开发的“新引擎”,点燃Web3创新之火 在区块链技术的浪潮中,RuleOS宛如一台强劲的“新引擎”,为个人和企业开发去中心化应用(DApp)注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…...
【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件
【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件 文章目录 [TOC](文章目录) 前言一、方法一:使用固件烧录工具1. 安装CH340驱动2. 打开FLASH_DOWNLOAD文件3. 选择芯片类型和烧录方式4. 选择烧录文件5. 参数配置 二、方法二:VSCODE导入工程1.…...
设计模式文章汇总-Golang语言实现
Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 Golang学习笔记_29——抽象工厂模式 Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 Golang学习笔记_34——组合模式 Gola…...
显式 GC 的使用:留与去,如何选择?
目录 一、什么是显式 GC? (一) 垃圾回收的基本原理 (二)显式 GC 方法和行为 1. System.gc() 方法 2. 显式 GC 的行为 (三)显式 GC 的使用场景与风险 1. JVM 如何处理显式 GC 2. 显式 GC…...
SpringMVC概述以及入门案例
目录 SpringMVC概述 为什么需要Spring MVC? SpringMVC入门 工作流程分析 SpringMVC概述 SpringMVC技术与Servlet技术功能等同,均属于Web层开发技术。SpringMVC是一种基于java实现MVC模型的轻量级Web框架。 为什么需要Spring MVC? 在传统J…...
5. 前后端实现文件上传与解析
1. 说明 在实际开发中,比较常见的一个功能是需要在前端页面中选择系统中的某个文件上传到服务器中进行解析,解析后的文件内容可以用来在服务器中当作参数,或者传递给其它组件使用,或者需要存储到数据库中。所以本文就提供一种方式…...
