Git基础知识:常见功能和命令行

news2024/11/20 2:37:41

文章目录

    • 1.Git介绍
    • 2.安装配置
      • 2.1 查看配置信息
    • 3.文件管理
      • 3.1 创建仓库
      • 3.2 版本回退
      • 3.3 工作流程
      • 3.4 撤销修改
      • 3.5 删除文件
    • 4.远程仓库
      • 4.1 连接远程库
      • 4.2 本地上传至远程
      • 4.3 从远程库克隆到本地
    • 5.分支管理
      • 5.1 创建分支
      • 5.2 删除分支
      • 5.3 合并分支+解决冲突

参考:
Git教程|菜鸟网络
Git教程—廖雪峰

1.Git介绍

  • 版本控制系统

Git 是一个开源的分布式版本控制系统,能敏捷高效地处理任何或小或大的项目,通常用于团队开发项目过程中对源码协同编辑和管理。Git 是 Linus Torvalds 在2005年为了帮助管理 Linux 内核开发,基于C开发的一个开源版本控制软件,方便其它内核开发者提交贡献和修改。什么是版本控制系统?比如用word写论文,每次修改重新保存另一个文件,最后会出现很多版本,如果导师再修改还需要来回发送文件合并新内容,这样会很麻烦。Git可以自动记录每次文件的改动,支持对文件的协同编辑,就不需要手动管理多个“版本”。

  • 分布式控制

其它版本控制工具 CVS, Subversion 均为集中式版本控制系统,版本库是集中存放在中央服务器的,个人从服务器中取得最新版本,修改结束后推送回中央服务器,类比图书馆,集中式版本控制系统需要连接网络才能工作。分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,因此也不需要连接网络,安全性也很高。目前还有很多其它的版本控制系统,比如CVS, SVN, ClearCase等,Git是最流行的。

2.安装配置

Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行,可在git-scm官网上下载。以windows系统为例,gitforwindows镜像下载,安装后包括图形界面Git GUI和Git Bash

在这里插入图片描述
在这里插入图片描述

2.1 查看配置信息

  • git config --list

配置你的服务器的信息,git是分布式版本控制系统,因此每台机器需要设置用户名和邮件,使用global表明这台机器上的所有Git仓库都使用这个配置信息,也可以对某个仓库指定不同的用户名和邮件

$ git config --global user.name 'name'
$ git config --global user.email 'email'

# 查看config
$ git config --list

3.文件管理

3.1 创建仓库

  • git init:初始化目录
  • git add:添加文件
  • git commit:提交文件

版本库也成为仓库(repository),相当于一个目录,这个目录里的所有文件都有能用Git管理,每个文件的修改历史都可以被追踪或还原。首先创建一个空目录mkdir,进入该文件cdpwd显示当前目录,通过git init将这个目录变成Git可以管理的仓库,目录下会增加一个.git目录,用于Git跟踪管理版本库。如果没看到可能是隐藏了,用ls -ah可以看见

$ mkdir Desktop/learngit
$ cd Desktop/learngit
$ pwd
/c/Users/pengy/Desktop/learngit

$ git init
Initialized empty Git repository in C:/Users/pengy/Desktop/learngit/.git/

$ ls -ah
./  ../  .git/

接着在learngit里面建立一个readme.txt文件,直接新建文件,然后通过git addgit commit将该文件提交到仓库。add告诉Git,将文件添加到仓库,可以反复使用,添加多个文件,commit将文件提交到仓库,-m是本次提交的说明。执行成功后会显示 1 file changed(一个文件被改动),2 insertions(+)(插入了两行内容)(readme.txt里的两行内容)。设置addcommit两步是因为commit可以一次性提交多个很多文件,可以多次使用add添加文件。

$ git add readme.txt
$ git commit -m 'wrote a readme file'
[master (root-commit) 643a68e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt
go go go
run everyday

3.2 版本回退

  • git status:掌握仓库当前的状态
  • git diff:查看修改的内容
  • git log:查看从最近到最远的提交日志
  • git reset:回退到某个指定的版本
  • git reflog:查看命令历史,以便确定要回到未来的哪个版本

修改readme.txt文件的内容,改成如下内容,用git status命令查看结果

go go go
sleep everyday
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status可以让我们时刻掌握仓库当前的状态,上面结果表明,readme.txt被修改过了,但是还没有提交修改。如果想要查看具体修改的内容,用git diff命令,可以看出将run修改为了sleep

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 9fbbc68..ab0fdda 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
 go go go
-run everyday
\ No newline at end of file
+sleep everyday
\ No newline at end of file

接着用前面提到的方法提交修改

$ git add readme.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt
$ git commit -m 'change sleep'
[master 3149571] change sleep
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git status
On branch master
nothing to commit, working tree clean

提交后显示没有需要提交的修改,工作目录working tree是干净。
按照前面的修改方法再修改文件如下

go go go
sleep everyday
young and rich
$ git add readme.txt
$ git commit -m 'append line'
[master 0efc261] append line
 1 file changed, 2 insertions(+), 1 deletion(-)

这样对文件不停的修改,每次修改提交都会保留一个当前内容,方面后续恢复,如同备份,目前readme.txt已经修改了三次

go go go
run everyday

go go go
sleep everyday

go go go
sleep everyday
young and rich

git log查看从最近到最远的提交日志

$ git log
commit 0efc2612b8fbf89a036e4358c4a0c83f9afddffc (HEAD -> master)
Author: bujibujibiu <123456@gmail.com> 
Date:   Wed May 24 14:37:07 2023 +0800

    append line

commit 3149571d74bc882218458f638eb119dae24e1a57
Author: bujibujibiu <123456@gmail.com>
Date:   Wed May 24 14:26:39 2023 +0800

    change sleep

commit 643a68e9294e906037cb37d3c120dac6f02a2127
Author: bujibujibiu <carrot12358@gmail.com>
Date:   Wed May 24 11:31:55 2023 +0800

    wrote a readme file

在图形化Git Gui中可以清楚看到提交历史
在这里插入图片描述
Git中Head表示当前版本append lineHEAD^表示上一个,HEAD~100表示上100个,用git reset回退到上一个版本change sleep,查看当前文件内容,变成了第二个版本

$ git reset --hard HEAD^
HEAD is now at 3149571 change sleep
$ cat readme.txt
go go go
sleep everyday

再次git log会发现只有两条记录

$ git log
commit 3149571d74bc882218458f638eb119dae24e1a57 (HEAD -> master)
Author: bujibujibiu <carrot12358@gmail.com>
Date:   Wed May 24 14:26:39 2023 +0800

    change sleep

commit 643a68e9294e906037cb37d3c120dac6f02a2127
Author: bujibujibiu <carrot12358@gmail.com>
Date:   Wed May 24 11:31:55 2023 +0800

    wrote a readme file

如果想要回到最新的那个版本,就找到commit id,版本号写前几位,Git会自动寻找对应的版本,可以发现又回到最新的版本

$ git reset --hard 0efc
HEAD is now at 0efc261 append line

$ cat readme.txt
go go go
sleep everyday
young and rich

为了找到版本号,可以用git reflog记录每一次的命令

$ git reflog
0efc261 (HEAD -> master) HEAD@{0}: reset: moving to 0efc
3149571 HEAD@{1}: reset: moving to HEAD^
0efc261 (HEAD -> master) HEAD@{2}: commit: append line
3149571 HEAD@{3}: commit: change sleep
643a68e HEAD@{4}: commit (initial): wrote a readme file

3.3 工作流程

  • 工作区—暂存区—版本库分支

在前文中提到过提交修改文件需要通过add和commit两步,流程如下,工作区是电脑里能看到的目录,版本库(Repository)是文件夹里的隐藏目录.git,不算工作区,Git版本库中包含一个暂存区(index/stage),还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEADgit add将文件修改添加到暂存区,git commit把暂存区的所有内容提交到当前分支master
在这里插入图片描述
比如在readme.txt里增加一行内容,同时新建文件LICENSE.txt,git status表明修改了一个文件,新增了一个文件为Untracked files。然后git add这两个文件,LICENSE.txt和readme.txt被放到了暂存区,git commit将两个文件提交到master分支

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        LICENSE.txt

no changes added to commit (use "git add" and/or "git commit -a")
$ git add readme.txt
$ git add LICENSE.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   LICENSE.txt
        modified:   readme.txt
$ git commit -m 'stage works'
[master 2312846] stage works
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 LICENSE.txt
$ git status
On branch master
nothing to commit, working tree clean

Git管理的是每一次修改,比如按照下面操作:修改readme.txt—add—修改readme.txt—commit—status,commit提交的只是第一次修改的内容,add将第一次修改放在暂存区,可见Git管理的是每一次修改,而不是文件本身。

# (1)修改readme.txt,新增track changes
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes

# (2)readme.txt存放在暂存区
$ git add readme.txt

# (3)再次修改readme.txt,变成track changes second
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second

# (4)提交暂存区里的readme.txt
$ git commit -m 'track changes'
[master bd56840] track changes
 1 file changed, 2 insertions(+), 1 deletion(-)
 
# (5)显示当前状态,第二次修改的readme.txt没有被提交
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git diff HEAD -- readme.txt可以看到工作区和版本库里的readme.txt区别

$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index a8981d7..a7d5c05 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2,4 +2,4 @@ go go go
 sleep everyday
 young and rich
 crzay life
-track changes
\ No newline at end of file
+track changes second
\ No newline at end of file

3.4 撤销修改

  • git checkout -- file:撤销file工作区的修改
  • git reset HEAD file:撤销暂存区的修改

如果要撤销对工作区的修改,使用git checkout -- file

# (1)readme.txt文件新增stupid day
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope
stupid day

# (2)删除工作区的修改
$ git checkout -- readme.txt

#(3)stupid day已经删除
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope

如果已经add到暂存区,使用git reset命令把暂存区的修改回退到工作区,再用checkout丢弃工作区的修改

# (1)修改readme.txt新增stupid day
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope
stupid day

# (2)add到暂存区,状态为待提交
$ git add readme.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

# (3)把暂存区的修改回退到工作区,状态为待add
$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

# (4)checkout撤销工作区的修改
$ git checkout -- readme.txt

$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope

已经提交了不合适的修改到版本库时,想要撤销本次提交,可使用前面的版本回退,不过前提是没有推送到远程库

3.5 删除文件

  • git rm:删除文件
  • git checkout -- file:恢复工作区file文件

假设新增一个文件并提交到了版本库,现在需要删除这个文件,首先用rm删除工作区中的文件,然后用使用git rm删除版本库中文件

# (1)新增文件test.txt,并add和commit到版本库
$ git add test.txt
$ git commit -m 'add test.txt'
[master 33f52c0] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

# (2)使用rm命令直接删除工作区的test.txt
$ rm test.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    test.txt

no changes added to commit (use "git add" and/or "git commit -a")

# (3)使用git rm删除版本库中的test.txt并commit
$ git rm test.txt
rm 'test.txt'
$ git commit -m 'delete test.txt'
[master 2e755a3] delete test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

如果用rm删除了工作区中的某个文件,但是发现删错了,可以通过checkout用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

# (1)新增文件test.txt,并add和commit到版本库
$ git add test.txt
$ git commit -m 'add test new'
[master 943447f] add test new
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

# (2)使用rm命令直接删除工作区的test.txt
$ cat test.txt
for test
$ rm test.txt
$ cat test.txt
cat: test.txt: No such file or directory

# (3)checkout 恢复工作区的文件
$ git checkout -- test.txt
$ cat test.txt
for test

4.远程仓库

4.1 连接远程库

Git是一种分布式版本控制工具,用于管理多版本项目。Github和Gitlab都是基于git的代码托管平台,Github一般用于托管开源项目,GitLab比较私密,适合企业。本地仓库可以和远程仓库之间传输需要SSH加密。以github为例。首先在本地Git配置config信息,在Github上用该邮件注册账号。

$ git config --global user.name 'name'
$ git config --global user.email 'email'

先通过cd ~/.ssh查看是否已经配置SSH,如果没有任何文件,则输入一下内容配置SSH,一直回车,密码可以不设置

$ ssh-keygen -t -rsa -C 'HAPPY@HAPPY.com'
Generating public/private rsa key pair.

重新打开.ssh目录,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以公开,将id_rsa.pub内容复制到Github的SSH key设置中

$ cd ~/.ssh
$ ls
id_rsa  id_rsa.pub
$ cat id_rsa.pub

判断是否连接成功,输入下面语句显示You’ve successfully authenticated, but GitHub does not provide shell access

$ ssh git@github.com

4.2 本地上传至远程

  • git remote add origin *********.git:连接远程仓库
  • git push:将本地分支的内容推送到远程库
  • git remote -v:查看远程仓库信息
  • git remote rm <name>:删除远程仓库

如果通过前面的3.1创建本地仓库后,想要在GIthub或者Gitlab中也创建一个Git仓库,并且两个仓库远程同步,首先在GIthub中Create repository创建一个空的Git仓库,然后,把本地仓库的内容推送到GitHub仓库,在本地的仓库下运行命令

$ git remote add origin *********.git

*********就是你的远程仓库地址,添加后,远程库的名字就是origin,这是Git默认的叫法。用git remote -v可以查看远程库信息

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/CPCS (master)
$ git remote -v
origin  https://github.com/bujibujibiu/learngit.git (fetch)
origin  https://github.com/bujibujibiu/learngit.git (push)

如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令

$ git remote rm origin

把本地库的所有内容推送到远程库上用git push,这样matser分支的内容就推送到Github中,以后每次修改都可以通过这个命令更新远程仓库

$ git push origin master

如果是远程库和本地库都初始化了,现在需要同步,那么首先要将远程库pull到本地,然后push。

$ git pull origin master

出现fatal: refusing to merge unrelated histories错误就用下面方法强制合并

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit(master)
$ git pull origin master --allow-unrelated-histories
From https://github.com/bujibujibiu/learngit
 * branch            master     -> FETCH_HEAD
Merge made by the 'ort' strategy.
 README.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 README.md
pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit(master)
$ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 95.42 KiB | 13.63 MiB/s, done.
Total 8 (delta 1), reused 0 (delta 0), pack-reused 0
To https://github.com/bujibujibiu/learngit.git
   7ec29b2..fb58fc0  master -> master

4.3 从远程库克隆到本地

  • git clone *****:克隆远程库至本地文件

4.2是先有本地仓库,后有远程仓库,如何关联远程库,假设现在先有远程仓,需要克隆到本地。比如首先创建Github仓库,勾选Initialize this repository with a README,这样GitHub会自动为创建一个README.md文件。下一步是用命令git clone克隆一个本地库。

$ git clone https://github.com/bujibujibiu/learngit.git

这样本地就会出现一个learngit的库,并且有README.md文件

5.分支管理

5.1 创建分支

  • git branch:查看分支
  • git branch name:新建分支
  • git checkout (branchname):切换分支命令
  • git checkout -b (branchname) :创建新分支并立即切换到该分支

Git管理修改是将这些提交串成时间线,也就是一个分支,在Git初始化时自动创建了一个分支master,当前版本HEAD指向mastermaster指向最新的提交点。每次提交,master分支都会向前移动一步,随着不断提交,master分支的线也越来越长。如果创建新的分支比如dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下:创建文件夹learngit,通过3.1的操作新建仓库并添加readme.txt文件

$ cd learngit
$ git init
Initialized empty Git repository in C:/Users/pengy/Desktop/learngit/.git/

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        readme.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git add .

$ git commit -m 'create readme file'
[master (root-commit) dd8bad0] create readme file
 1 file changed, 6 insertions(+)
 create mode 100644 readme.txt
 
$ git status
On branch master
nothing to commit, working tree clean

$ git branch
* master

然后新建分支test,切换到test分支

~/Desktop/learngit (master)
$ git branch test

~/Desktop/learngit (master)
$ git branch
* master
  test

~/Desktop/learngit (master)
$ git checkot test
git: 'checkot' is not a git command. See 'git --help'.

The most similar command is
        checkout

~/Desktop/learngit (master)
$ git checkout test
Switched to branch 'test'

test分支下新增文件夹test.txt,ls发现在test分支下有两个文件readme.txt和test.txt,再切回到master分支,只剩下readme.txt文件

~/Desktop/learngit (test)
$ ls
readme.txt

~/Desktop/learngit (test)
$ echo 'runoob.com' > test.txt

~/Desktop/learngit (test)
$ ls
readme.txt  test.txt

~/Desktop/learngit (test)
$ git add .
warning: in the working copy of 'test.txt', LF will be replaced by CRLF the next time Git touches it

~/Desktop/learngit (test)
$ git commit -m 'add test file'
[test d20d68d] add test file
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

~/Desktop/learngit (test)
$ ls
readme.txt  test.txt

~/Desktop/learngit (test)
$ git checkout master
Switched to branch 'master'

~/Desktop/learngit (master)
$ ls
readme.txt

使用git checkout -b (branchname) 新建分支newtest并切换到该分支,文件和master一样

~/Desktop/learngit (master)
$ git checkout -b newtest
Switched to a new branch 'newtest'

~/Desktop/learngit (newtest)
$ ls
readme.txt

5.2 删除分支

  • git branch -d (branchname):删除分支

使用git branch -d (branchname)删除前面新建的newtest分支,注意要切换到别的分支,不能删除当前所在分支

~/Desktop/learngit (newtest)
$ git branch
  master
* newtest
  test

~/Desktop/learngit (newtest)
$ git branch -d newtest
error: Cannot delete branch 'newtest' checked out at 'C:/Users/pengy/Desktop/learngit'

~/Desktop/learngit (newtest)
$ git checkout master
Switched to branch 'master'

~/Desktop/learngit (master)
$ git branch -d newtest
Deleted branch newtest (was dd8bad0).

~/Desktop/learngit (master)
$ git branch
 * master
  test

5.3 合并分支+解决冲突

  • git merge (branchname):将任何分支合并到当前分支中(可以不是主分支)

master分支中新建文件runoob.php,并且commit,这样master分支中有两个文件readme.txt和runoob.php,test分支中有两个文件readme.txt和test.txt

~/Desktop/learngit (master)
$ git branch
* master
  test

~/Desktop/learngit (master)
$ touch runoob.php

~/Desktop/learngit (master)
$ git add .

~/Desktop/learngit (master)
$ git commit -m 'add runoob file'
[master 3dcca8c] add runoob file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 runoob.php
 
~/Desktop/learngit (master)
$ ls
readme.txt  runoob.php

~/Desktop/learngit (master)
$ git checkout test
Switched to branch 'test'

~/Desktop/learngit (test)
$ ls
readme.txt  test.txt

合并test分支到master分支中,假设两个分支下都有test.txt文件且不一样,合并会产生冲突

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (test)
$ cat test.txt
runoob.com
study
new
amazing
HAPPY

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ cat test.txt
runoob.com
study
new
new again

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ git merge test
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

打开test.txt会看到冲突内容

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ cat test.txt
runoob.com
study
new
<<<<<<< HEAD
new again
=======
amazing
HAPPY
>>>>>>> test

Git通常会在进行合并操作时生成MERGE_MSG交换文件,以保存合并消息的内容。如果Git在工作目录下找到了这个交换文件,说明上一次的合并操作没有成功完成,编辑器的进程可能意外终止。输入rm .git/.MERGE_MSG.swp

根据提示修改master分支下的test.txt文件,重新commit后显示[master 2bf0895]表示成功

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ git add .

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ git commit -m 'merge change'
[master 2bf0895] merge change

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean

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

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

相关文章

(5)将固件加载到没有ArduPilot固件的主板上

文章目录 前言 5.1 下载驱动程序和烧录工具 5.2 下载ArduPilot固件 5.3 使用测试版和开发版 5.3.1 测试版 5.3.2 最新开发版本 5.4 将固件上传到自动驾驶仪 5.5 替代方法 5.6 将固件加载到带有外部闪存的主板上 前言 ArduPilot 的最新版本&#xff08;Copter-3.6, Pl…

顺序表、链表刷题指南(力扣OJ)

目录 前言 题目一&#xff1a;删除有序数组中的重复项 思路&#xff1a; 题解&#xff1a; 题目二&#xff1a;合并两个有序数组 思路&#xff1a; 分析&#xff1a; 题解&#xff1a; 题目三&#xff1a;反转链表 思路&#xff1a; 分析&#xff1a; 题解&#xff1a; 题目四&…

软考A计划-系统集成项目管理工程师-信息文档和配置管理-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【LeetCode每日一题】——304.二维区域和检索-矩阵不可变

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 中等 三【题目编号】 304.二维区域和检索-矩阵不可变 四【题目描述】 …

【沁恒蓝牙mesh】CH58x flash分区与数据存储管理

本文主要介绍了 沁恒蓝牙芯片 CH58x 的flash 分区与数据存储管理 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#x1f4dd; 个人主页&#xff1a;欢迎访问我的 Ethernet_Comm 博客主页&…

DPG算法

1 一言以蔽之 &#xff08;1&#xff09; DPG是属于确定性策略梯度算法&#xff08;2&#xff09;用于解决连续动作空间问题 2 优点和缺点 2.1 优点&#xff08;1&#xff09;从理论上可以证明&#xff0c;deterministic policy的梯度就是Q函数梯度的期望&#xff0c;这使得…

SAP数据库表维护视图生成器的使用

在SAP中&#xff0c;经常需要自定义数据库表。而且可能需要人工维护数据库表中的数据&#xff0c;可以通过SM30进行维护数据&#xff1b;但是SM30事务的权限太大&#xff0c;不适宜将SM30直接分配&#xff1b;因此&#xff0c;可以通过给维护表分配事务代码&#xff0c;来达到控…

云曦暑期学习第三周——ctfshow--php特性(89-104)

目录 web89 preg_match函数 、数组 web90 intval()函数、强比较 web91 正则修饰符 web92 intval()函数、弱比较 web93 八进制、小数点 web94 strpos() 函数、小数点 web95 小数点 web96 highlight_file() 下的目录路径 web97 数组 web98 三目运算符 web9…

Windows搭建Snort环境及使用方式

目录 0x01 前置环境0x02修改配置文件0x03 自测0x04 使用0x05 感言 0x01 前置环境 环境描述windows10snort2.9.2https://www.snort.org/downloads 先把上面环境下载好&#xff01; 需要注意的是安装npcap这个软件 0x02修改配置文件 软件安装目录&#xff1a;C:/Snort/ 配置文…

有哪些开源和非开源的项目管理工具?

开源和非开源项目管理工具各有其特点和优势。下面是一些常见的开源和非开源项目管理工具以及它们的简要介绍。 开源项目管理工具&#xff1a; OpenProject&#xff1a;OpenProject 是一个功能强大、易于使用的开源项目管理工具。它提供了项目计划、任务管理、团队协作、文档管…

Python开发环境Spyder介绍

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 Spyder简介 Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境&#xff0c; 提供高级的代码编辑、交互测试、调试等特性&#xff0c;支持包括 Windows、Linux 和 OS X 系统。 &#x1f447; &#x1f44…

【多模态】BLIP——统一视觉语言理解和生成的引导语言图像预训练模型

多模态指的是多种模态的信息&#xff0c;包括&#xff1a;文本、图像、视频、音频等。而多模态研究的就是这些不同类型的数据的融合的问题。目前大多数工作中&#xff0c;只处理图像和文本形式的数据&#xff0c;即把视频数据转为图像&#xff0c;把音频数据转为文本格式。 目录…

PHP 前后端分离,运行配置

H5 WEB目录:安装 yarn install、npm install &#xff08;依赖包&#xff09; 在电脑&#xff1a;安装nodejs Composer下载 &#xff1a;https://getcomposer.org/

彭迦信和梁柱搭班两年,腾讯音乐总市值相对减少约200亿美元

8月1日、8月2日&#xff0c;腾讯音乐-SW&#xff08;HK:01698&#xff0c;下称“腾讯音乐”&#xff09;在港交所的股价连续两日下跌&#xff0c;跌幅分别为2.21%和3.02%。按2023年8月2日的收盘价计算&#xff0c;腾讯音乐的港股市值约为454.17亿港元&#xff0c;总市值约为882…

算法:DFS【深度优先搜索】

概念&#xff1a; 深度优先搜索&#xff08;Depth First Search&#xff09;简称为DFS。一种用于遍历或者搜索树或图的算法。 沿着树的深度遍历树的所有节点&#xff0c;尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或在搜寻时结点不满足条件&#xff0c;则搜索将回溯…

《HeadFirst设计模式(第二版)》第三章代码——装饰者模式

代码文件结构&#xff1a; 星巴兹案例&#xff1a; CondimentDecorator package Chapter3_DecorativeObjects.Decorators;import Chapter3_DecorativeObjects.Beverage;/*** Author 竹心* Date 2023/8/3**/public abstract class CondimentDecorator extends Beverage {Bever…

opencv-34 图像平滑处理-双边滤波cv2.bilateralFilter()

双边滤波&#xff08;BilateralFiltering&#xff09;是一种图像处理滤波技术&#xff0c;用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同&#xff0c;双边滤波在考虑像素之间的空间距离之外&#xff0c;还考虑了像素之间的灰度值相似性。这使得双边滤波能够有…

Scratch 教程 -- 逐字化输出

首先我们来探讨一下对于一个逐字化模块(自定义积木)&#xff0c;有哪些需要设置的参数(请注意&#xff0c;在这里我会先提出一种常规且简便的写法&#xff0c;再进一步讲述其它的优化版本) 1.内容&#xff1a;对于一个文本&#xff0c;其内容是一定需要的(不然你还用啥逐字化啊…

新概念英语的网盘资源

新版新概念英语1-4册全部视频和课本_免费高速下载|百度网盘-分享无限制百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/18wyeA#l…

C++STL——deque容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.deque容器的基本概念二.deque容器常用操作①deque构造函数②deque元素操作③deque赋值操作④deque交换操作⑤deque大小操作⑥deque插入和删除…