Git学习使用笔记
目录
一、基本介绍
1.1 版本控制
1.2 版本控制软件的基础功能
1.3 多人协作开发/集中式版本控制
1.4 分布式版本控制
二、Git安装
2.1下载git
2.2 使用Github Desktop软件
2.2.1 创建本地仓库
2.2.2 删除本地仓库
2.2.3 仓库文件操作
2.2.4 多人协作
2.2.4.1 分支创建
2.2.4.2 分支合并
2.2.4.3 标签
2.2.5 远程仓库
2.2.5.1 创建远程github仓库
2.2.5.2 创建分支
2.2.5.3 创建远程gitee仓库
2.2.6 README文件
2.2.7 忽略文件
2.2.8 多文件同时修改
2.2.9 版本号
2.2.10 分支存储
2.2.11 暂存区、工作区、存储区
三、git 常用命令
3.1 产看git 版本命令
3.2 创建仓库命令
3.2.1 创建本地仓库
3.2.2 克隆远端仓库
3.3 git用户名和邮箱配置
3.4 产看仓库状态命令
3.5 向暂存区添加文件命令
3.6 提交命令
3.7 查看提交信息
3.8 恢复删除文件命令
3.8.1 删除文件没有提交
3.8.1 删除文件已经提交了
3.9 分支命令
3.10 标签命令
3.11 远程仓库操作命令
四、总结
一、基本介绍
1.1 版本控制
包括软件版本和文件版本,软件版本就是比较熟悉的VS,有很多版本,VS2022、VS2017。
文件版本就是对文件进行修改后,又产生了一个版本。多次修改,就是有很多个版本,例如text_v1、text_v2、text_v3。主要为了保存重要的历史纪录,一旦出现问题,可以恢复数据。
如果文件特别多,每一次都给他手动修改文件名,这时候就可以使用版本控制软件,它可以自动帮助我们完成版本号的生成。
1.2 版本控制软件的基础功能
(1)保存和管理文件
如果一份文件有3个版本,版本管理软件可以自动生成版本号,并且对这3个版本的文件进行保存。
(2)提供客户端工具进行访问
一份文件有3个版本,如果一个用户想直接访问这三个文件是不可以的,必须通过客户端工具,才能访问这3个文件。主要防止直接在这个文件上篡改。
(3)提供不同版本文件之间的比对功能
文件和文件之间的不同,通过版本控制工具完成的。
1.3 多人协作开发/集中式版本控制
有一台电脑存储所有文件,然后不同的人就可以同时访问中央服务器,体现了多人协作开发的功能。
如果一个人想要修改文件,首先需要将中央服务器的文件下载到本地,然后在本地进行操作,修改完成后,在把文件上传至中央服务器。
如果三个人都下载了文件,第一个用户修改文件之后,将文件上传到了中央服务器,第二个用户也将文件进行了修改,改完之后,也把文件上传至中央服务器后,就会把之前第一个用户的文件覆盖了。同理第三个用户更改完之后,会覆盖第一个和第二个用户修改的文件,这个就是文件冲突问题。
VSS应对这个文件冲突得的方法是对文件进行锁定,当没有人修改的时候,文件是没有上锁的,当第一个用户下载了文件之后,这个文件就被上锁了,第二个用户就无法对此第一个用户正在修改的文件进行修改。只有当第一用户将文件修改完成之后,上传至中央服务器,然后这个文件就会解锁。此时第二个用户就可以下载了,拿到的文件是最新的文件,也就是第一个用户修改之后的文件,那么第二个用户就可以在第一个用户的修改基础上修改了。
这种集中式版本控制超级麻烦,别人在修改的时候,你就不可以修改,效率非常低。后来出现了CVS和SVN这两个工具,也是没有解决文件冲突问题,但是可以规定一个文件不同部分由不同的人修改,例如用户1修改文件的第一行,用户2修改文件的第二行。当提交文件的时候,只需要对文件进行比对就可以了。具体就是三个用户都下载了一下这个文件,然后约束第一个人只更改第一行,第二个人更改第二行,第三个人更改第三行。然后上传的时候,第一个人修改的就会替换第一行,第二个人修改的就会替换第二行,第三个人修改的就会替换第三行。这个由版本控制工具完成,如果三个人同时对文件的同一处进行修改,还是会出现文件冲突问题,无法解决,只能人工控制。如果中央服务器坏了,那么就无法进行工作了,文件也会丢失。
1.4 分布式版本控制
除了中央服务器存储所有文件以外,在本地也有一个库,同样存储着文件。本质上这两个库是一样。
这个时候,用户还是通过客户端对文件进行访问,这时候访问的就不是中央服务器了,访问的是本地的库。这种分布式的好处在于,一旦中央服务器出现了问题一以后,用户还是可以通过本地的仓库工作,还是可以提交,只不过提交的不是中央服务器,提交的是本地仓库。当中央服务器恢复以后,将本地仓库和中央服务器的仓库进行同步即可。
总结:分布式不受网络和中央服务器的限制,而集中式控制受网络和服务器的限制。
二、Git安装
2.1下载git
下载官网是Githttps://git-scm.com/
进去之后点击DownLoad即可,选择自己电脑对应的版本。
同时,除了下载git以后,最好再点击GUI Client,下载一下GUI界面。将两个软件下载好以后,双击即可安装。
2.2 使用Github Desktop软件
2.2.1 创建本地仓库
打开这个软件之后,右边有4个选项
(1)创建一个历程库,用于学习的
(2)从网络上克隆一个仓库,这个意思就是从中央服务器上克隆仓库。
(3)创建一个本地仓库
(4)将本地已经存在的仓库田添加进来
如果登陆了github账号,那么软件的左边会展示你这个账号的github上面的仓库。
创建一个本地仓库:
(1)最上面的是仓库名字
(2) 第二个是对这个仓库的描述
(3)选择本地仓库路径,可以将下面的README也选上,也就是在创建仓库的时候自动创建一个RTEADME文件。
然后点击Create respository即可创建一个本地仓库。
创建完成后,即可看到仓库窗口了。
(1)文件操作状态区:主要保存文件的更改、删除等操作
(2)左下角区域用与将本地仓库传出至云端仓库
2.2.2 删除本地仓库
点击file->new repository在创建一个仓库,如果想删除仓库,可以右键仓库然后选择remov,这里可以将仓库从软件里移除,还可以直接删除仓库,删除的仓库回收站里边有。
默认是不删除文件夹里的仓库的,只是从软件里删除了。
同时可以直接拖拽一个仓库到软件里,会自动识别是一个仓库,点击添加即可。
2.2.3 仓库文件操作
创建文件提交:在仓库文件夹里边,创建一个新文件a.text,在这个文件里写入4个A,然后关闭文件,即可看到软件自动识别到了新创建的文件,还有文件里更改的部分。软件只能动态识别仓库路径里的文件,不在仓库路径下的文件是不能动态识别的。
创建的文件不是直接在本地仓库里边的,本地仓库的文件夹实际是维护在.git文件夹下面的。刚才创建文件的路径是操作文件的路径,和本地仓库路径是两个完全不同的路径。
而既然是两个完全不同的路径,软件可以动态识别更改,就是比对功能。 当创建一个新文件后,操作路径有了文件,但是本地仓库里边是没有这个新文件的,这时候比对功能就可以发现这个新创建的文件。
而如果想把这个文件存储到本地仓库路径下,就需要提交,称为commit。在软件的左下角进行操作。
测试提交以后,发现软件就变化了,没有变化的文件了。
提交以后,本地仓库里的文件和操作路径下的文件是相同的,比对之后也就没有文件修改了。
修改文件提交:这个时候本地仓库里边已经有了两个文件,一个是a.text,另一个是c.text.如果这时候更改c.text文件,在里面添加4个c,这时候软件软件又会自动识别到更改,然后添加描述后,再次体提交。
之前是仓库没有文件,直接添加文件。这次是有这个文件,更改文件内容。仓库里有一个旧版本的使用黑色表示,新版本的使用橙色表示。
提交完成后,仓库里会存储两个版本的文件,一个是橙色的,一个是黑色的。对应本地仓库也就是两个版本号。提交之后也就是下图。
版本号: 版本号git使用40个16进制的数字表示,也称为提交码,在软件的history里边可以看到。通过版本号也可以找到文件更改信息,去.git文件夹下的object里边找。
文件删除: 将操作空间里边的C.text文件删除,可以看到软件再次发现变化,显示c.text文件被删除了。
删除文件之后,再次向本地仓库提交,因为本地仓库是办保存所有版本的,即使是删除文件也要进行提交。提交完成之后,变化又变成0了。同时本地仓库里边保存了一个删除文件测版本,也就是第三个版本了。如果再创建一个文件,软件还是会识别。
2.2.4 多人协作
如果三个人分别开发不同的功能,有一个工程仓库,里边存储了这个工程的所有文件,在开发过程中,三个人随时可以上传自己修改的文件,这样就会出现很多个版本,提交顺序非常乱。同时三个人可能同时修改同一个文件,出现文件冲突问题。而且频繁的提交会出现非常多的版本信息,容量就会变大,比对的时候效率就会变慢。
为了解决上面这些问题,git提供了一个分支的功能,分支就是当前仓库的一个副本,可以在副本上进行操作。最后将每个人的分支进行合并,最后可能还是会有文件冲突,因为最后每个人只提交一个版本,只需要解决一次冲突即可。
2.2.4.1 分支创建
假设王五为项目经理,只负责维护这个项目的工程库,张三和李四都是开发人员,首先这两个开发人员分别开一个分支,也就是拷贝一个项目工程库,然后在自己的分支上不算提交,最后将分支合并,都合并到王五这个分支上。
演示:首先创建一个新的版本库,创建完成之后,可以看到,最开始就有一个分支,叫做main分支,可以右键对main进行改名,这个main也可以在option->git里边设置。
点击上方的New branch即可创建新的分支,这里创建两个分支,一个是user,一个是order分支,创建完即可在软件中看到。√号表示当前软件对哪个分支进行操作。
首先操作user分支,点击show in holder,进入user分支,然后创建新的user.text文件,更改这个文件。然后使用软件提交到user分支上。然后切换到order分支上,然后点击show in holder发现,文件夹里没有刚才创建的user.text文件。这是因为切换之后,文件夹里保存的就是对应分支的库。
然后切换到order分支里面,创建一个文件叫order.text文件,然后提交到order分支上。这时候order分支库里就有一个order文件了。切换到user分支,文件夹里就是user文件。切换到main分支,文件夹里啥也没有。
2.2.4.2 分支合并
将user和order分支都合并到main分支上,选择最下面的合并按钮即可。这里注意你要往哪个分支上合并,就选择哪个分支,我要往main分支上合并,所以选择main。
点击完选择合并按钮后,对要合并的分支进行选择,这里向把user合并到main,所以选择user,下方会出现提示,提示from user into main 。
在分支合并过程中,碰到了同样的文件。这里首先在user分支里创建一个common.text文件,然后对user分支进行提交,提交完成后把user分支合并到main分支上,此时main分支的文件夹里就多了common.text文件了。
这时候再将order分支合并到main分支上的时候,软件会提示有文件冲突。
然后点击创建合并提交,会弹出解决冲突文件,这时候进入默认编辑器进行处理冲突文件,
打开文件之后,发现里边有一个HEAD,表示此文件所在分支,下面的是此份之下存的值,下面还有一个order,表示order分支下存储的值。进行修改。
修改后的,将两个都保存。
修改完成后软件自动检测到,冲突已经解决,然后再点击合并即可解决冲突文件的合并。
2.2.4.3 标签
进行分支合并的时候,是软件自动完成的,没有写描述,可以在历史记录上添加标签。
添加完标签以后,即可看到标签显示在合并分支的旁边。 同时删除标签也是右键,删除tag。
2.2.5 远程仓库
2.2.5.1 创建远程github仓库
登陆github账号以后,点击New即可创建新的仓库,在弹出的窗口里,需要对如下下图红框里边内容进行设置,首先是仓库名字,然后是对仓库的描述,设置仓库是公开的还是私密的,选择是否创建仓库的时候添加README文件。
创建好一个新仓库后,就可以看到一个main分支了,同时有Add File按钮,点击之后,可以选择直接添加文件,或者上传文件。
这里演示一下直接创建文件。
需要对添加的文件名字进行设置,然后点击右上角的提交,会弹出来一个窗口,对提交进行描述,然后点击commit按键即可向仓库提交,同时仓库中可以看到新的文件。
提交完成之后,仓库也会出现一个提交码,类似于版本号。
github支持在线更改文件,点击要更改的文件,然后选择右边的铅笔,更改完之后,再次提交。
提交完成之后,可以在History里边看历史版本。
2.2.5.2 创建分支
点击branch按钮,即可进入分支。
点击New branch按钮,即可创建新的分支。填写完分支名字以后,点击创建新的分支,即可发现出现了两个分支。这个操作跟本地操作是一样的。
2.2.5.3 下载远程仓库
点击file里的clone仓库按键
在下载的远程仓库文件夹里边,创建一个a.test文件,然后按之前一样,进行本地提交。远程仓库并没有这个文件,点击push操作,将本地仓库提交到远端仓库。
2.2.5.3 创建远程gitee仓库
登陆gitee账号,在活跃仓库里边点击新建,然后填写仓库信息即可完成创建。
新建好仓库以后,使用软件克隆gitee远端仓库。首先点击克隆/下载,复制HTTPS地址 。
在软件克隆下载里边选择URL,将复制的地址输入进入。
克隆完成之后,操作跟github一样,创建一个a.text文件,更改里边内容,然后提交到本地仓库,再推送到gitee远端仓库即可。
2.2.6 README文件
在创建仓库的时候,可以选择初始化一个README文件,这个README文件一般存储在仓库的根目录下,用于对仓库进行描述。
2.2.7 忽略文件
在创建仓库的时候,有一个选项就是忽略文件,里边可以选择在比对的时候,不参与比对的文件。
可以在创建仓库的时候,不选择忽略文件选项,后面在比对的时候,通过对想忽略文件右键,添加忽略即可。这里使用NotePad++,在设置里边开启简单备份功能,每当更改的时候,会在目录里出现一个.bak文件。创建一个a.text文件,并且更改会产生一个a.bak文件,这个文件同样会被比对,在软件里显示出来。
这个备份问文件是没有用的,不希望存储当仓库里边,就使用忽略功能。
在比对发现文件更改时,选择想要忽略的文件,右键添加到忽略文件中,也就是只把a.txt.bak文件添加到忽略文件中了。
这时候再创建一个b.text文件,然后更改,发现此时b.txt.bak文件还是被比对了,如果想让所有的备份文件都忽略,可以右键选择将所有的.bak文件都添加到忽略文件中。
补充:比对功能只针对文本文件,例如像word、压缩包这种文件,不能比对变化了什么,只能发现更改了。
2.2.8 多文件同时修改
在一个仓库已经有a.text和b.text文件的基础上,删除a.text,修改b.text,创建c.text文件,可以发现比对时会标注不同。对a文件标注红色,表示删除了,对b文件标注黄色,表示更改了,对c文件标注绿色,表示增加了。
除了直接显示文件的操作以外,在比对文件有一行比对信息,其中-1,表示旧的文件,后面的2表示,从旧的文件的第二行开始变化。+1表示新的文件,后面的4表示新文件变化到第四行。
这个红色部分就是原来的,绿色就是后来的,4表示到第四行都变化了,3表示到新文件的第三行
2.2.9 版本号
版本号是40位的,通过特殊的公式计算出来的。通过版本号可以避免在合并的时候出现文件冲突,还可以通过版本号定位文件,版本号由2 + 38组成,在.git文件夹下的object文件夹下找到前两位的文件夹。
直接打开这个文件是看不了的,需要使用git自带的命令查看。正常文件应该是右边绿色的,但是直接 使用记事本打开是乱码的。
在仓库文件夹选择 Git Bash here
在命令行输入命令即可查看。
git cat-file -p 版本号
可是看到的并不是我们想要的内容,提示了一个tree,后面还有一个版本号,继续查看这个文件。
查看这个版本号文件之后,又弹出来一个版本号,继续查看。
这个时候即可看到我们想看的内容。也就说git在提交一次之后,会保存多个内容,所以需要查看多次。
增加文件:一个版本号里边存着多个信息。
修改文件:会多一个a.text文件的版本号
删除文件:将a.text文件删除,提交信息还是会保存上一次的提交版本号,但是文件状态不会保存删除的文件了,因为这个版本删除了文件。删除文件并没有把文件真正删除,只是文件没有关联。
2.2.10 分支存储
提交信息里边只存储了关联状态,那么软件是怎么知道版本顺序的?
1、在.git里边有一个HEAD的文件,这个里边存储的是一个路径
2、按这个路径可以再找到一个文件,叫做main文件,这个文件里边存储一个版本号,这个版本号就是最新的文件的版本号。
因为现在只有一个分支,就是main分支,如果再创建一个分支user,即可看到这个路径下出现两个文件,一个main,一个是user。
此时软件里边选择的是user分支,也就是软件操作的是user分支,此时HEAD文件自动更改为了user文件的路径。
这个HEAD文件是随操作软件里边的分支更改的。
更创建完user的时候,user和main里边存储的是相同的版本号,因为是同一份提交信息。
当user里边再次提交信息,就会再创建一个新的提交信息,然后user就会存储新提交的版本号。
并没有产生新的仓库,只是再不同的分支中引用不同的提交信息。
那么为啥不同分支显示不同的文件?
因为不同分支指向的提交文件不同,比如两个分支,可能指向不同的提交状态文件,而不同的提交状态文件可能包含不同的文件。所以在切换分支的时候,软件对读取分支指向的提交状态文件,来取出不同的文件。
2.2.11 暂存区、工作区、存储区
工作区就是我们操作的文件夹,暂存区就是进行比对操作的,存储区就是仓库了。
当在工作区修改一个文件后,如果想进行比对,需要将想比对的文件添加到暂存区,使用git add指令即可,当然想忽略的文件就不需要添加到暂存区了。比对完成以后,如果想存储到仓库里边,需要进行提交,使用git commit指令即可完成提交。
三、git 常用命令
git仓库分为本地仓库和云端仓库,云端仓库常用的就是gitee和github,通过克隆可以将云端仓库下载到本地,通过发布可以将本地仓库发布至云端仓库。本地仓库分为三个区域,一个是工作区,用于编辑文件的,第二个是暂存区,用于比对文件的,第三个是存储区,用于存储文件的。 工作区文件通过git add 添加到暂存区,暂存区比对完成后,通过git commit 提交到存储区。如果本地仓库如果发生了变化,可以通过push操作推送到云端,同时如果云端文件发生了改变,通过pull可以将远端文件拉去到本地。软件里都是通过红框来进行pull 和 push,如果本地更改了,云端也更改了,在你push推送的时候,它就会给你报文件冲突,这时候你就必须处理文件冲突才能上传。
3.1 产看git 版本命令
创建一个仓库文件夹,右键即可看到Git Bash Here 按键,输入git -v回车
git -v
3.2 创建仓库命令
3.2.1 创建本地仓库
手动创建一个文件夹,用于作为库文件夹。输入git init 即可创建一个本地仓库。注意使用这个命令,并不会自动进行初始化提交,只会创建一个主分支master,所以.git文件夹下面的HEAD文件只有一个master路径,但是这个路径里边是空的。而使用软件创建仓库会自动进行初始化提交。
git init
3.2.2 克隆远端仓库
使用gitee在创建一个远端仓库,然后复制Http地址,使用git clone克隆远端仓库到本地。
git clone 远端仓库地址
如果不想个远端仓库文件夹名字一样 可以在网址后面加上自己定义的名字
git clone 远端仓库网址 自定义仓库名字
在clone过程中可能问你要gitee账号和密码,正常输入就可以,也可以使用账号和私人令牌,私人令牌在gitee个人主页可以领取。
克隆完成后,发现HEAD文件里保存的路径里的文件,里边存储的版本号和官网的最新版本号是一样的,也就是说将整个仓库都下载下来了。
3.3 git用户名和邮箱配置
git在操作仓库的时候,需要有一个有户名和邮箱,通过git config命令进行配置即可,配置好用户名和邮箱即可在.git文件夹下的config里边看到,也可以直接在这里边改。当然这只是更改了一个仓库的配置,如果多个仓库需要都配置一边,比较麻烦,可以使用参数--global进行全局配置,这个直接对C盘用户目录下的.gitconfig进行配置。如果使用的软件可以在option里边更改,或者在仓库设置里边更改。
配置用户名:
git config user.name 用户名
配置用户邮箱:
git config user.email 用户邮箱
配置全局用户名:
git config --global user.name 用户名
配置全局用户邮箱:
git config -global user.email 用户邮箱
3.4 产看仓库状态命令
使用git status命令即可查看仓库分支、提交状态。
git statue
3.5 向暂存区添加文件命令
在仓库工作区新建一个文件,再使用git status可以看到显示有一个文件是没有追踪到,这个和直接把仓库拖拽到软件里,软件也显示有一个文件没有追踪是一样的。
使用git add命令将想比对的文件,使用git status即可产看到暂存区已经有一个暂存文件了。
向暂存区添加文件:
git add 要对比的文件git add *.txt #将所有的txt文件都放到暂存区
从暂存区删除文件:
git rm -cached 要放回工作区的文件
3.6 提交命令
将暂存区的文件提交到存储区,使用git commit命令,其中-m 后面接消息信息
git commit -m 描述信息
3.7 查看提交信息
查看历史提交信息,使用git log命令,会在控制台打印出历史的提交信息。如果感觉看着太乱了,可以使用--oneline命令,让消息显示在一行。
git loggit log --oneline #显示在一行
3.8 恢复删除文件命令
3.8.1 删除文件没有提交
如果是误删除了某一个文件,使用git restore命令即可恢复。
git restore 要恢复文件名
3.8.1 删除文件已经提交了
1、可以使用git reset 命令恢复,同时要加上--hard参数。恢复完成后,再次查看提交信息,发现删除文件的提交信息也被删除了。
git reset --hard 要恢复的版本号
2、使用git revert命令进行提交,这个后面接的版本号是要恢复到这个提交版本号之前的操作。
git revert 要恢复版本号之前操作的版本号
3.9 分支命令
在使用命令行初始化一个仓库后,如果直接进行分支操作,会报错,因为命令行初始化仓库不会提交初始化,而分支操作必须在分支基础上才行。所以需要先提交再创建分支。
创建分支:
git branch 分支名字
查看分支:
git branch -v
切换分支:
git checkout 切换到哪个分支名
创建分支同时切换分支:
git checkout -b 要创建的分支名字
删除分支:
git checkout -d 要删除的分支名字
合并分支:
如果有两个分支,一个是master分支,另一个是oder分支,master分支和order分支都有一个a.text文件,在order分支里边更改了a.text文件,然后想把order分支合并到master分支上,首先需要使用git checkout命令切换到master分支上,然后使用git merge命令合并分支。然后会提示有文件冲突,显示为merging中,这时候直接打开冲突文件,进行修改,然后再次add commit即可。
注意:只有两个分支同时修改了同一部分才会出现冲突。
合并分支命令:
git merge 要合并的分支名字
3.10 标签命令
通过git log查看提交信息的时候,版本号非常长,看起来比较麻烦,可以通过git tag命令给某一次提交添加标签,然后可以直接通过git log 标签名查看提交状态。
添加标签:
git tag 标签名字 版本号
查看所有标签:
git tag
通过标签查看提交信息:
git log 标签名字
删除标签:
git tag -d 标签名字
通标签进行分支创建:
git checkout -b 标签名字
3.11 远程仓库操作命令
在仓库的.git文件夹下里边的config文件里,有一个remote,就是表示远程仓库的。可以使用remote后面的名字代表远程仓库,而里边的url就是远程仓库的地址。可能有的仓库不提供HTTP地址,提供SSH地址,直接把SSH地址复制到URL上边。
如果config里边没有remote,说明是一个本地仓库,可以通过命令添加
git remote add 名称 仓库地址
删除一个远程:
git remote remove 远程名字
更改名字:
git remote rename 新名字
更新远端仓库:将本地仓库推送到远端
git push 远端名字
如果是SSH连接会报错,显示权限不对,这时候需要生成SSH密钥
ssh-keygen -t rsa -C SSH仓库地址
然后一直回车即可,最后密钥文件会生成在C盘用户目录下.ssh文件夹下,有一个.pub的文件,把里边内容全部复制,进入gitee仓库,在个人主页设置里边点生成SSH密钥,把复制的内容添加进进去即可。
添加完SSH密钥以后,再次执行git push命令即可推送到远端仓库。
更新本地仓库:远端仓库内容发生更改,需要更新本地仓库
git pull 远端名字
四、总结
1、本博客对应B站视频
尚硅谷新版Git快速入门(3h迅速掌握git)_哔哩哔哩_bilibili
2、推荐一个git学习网站
Learn Git Branching
最后,如果有任何问题可随时联系我,有侵权立马删除!
相关文章:
Git学习使用笔记
目录 一、基本介绍 1.1 版本控制 1.2 版本控制软件的基础功能 1.3 多人协作开发/集中式版本控制 1.4 分布式版本控制 二、Git安装 2.1下载git 2.2 使用Github Desktop软件 2.2.1 创建本地仓库 2.2.2 删除本地仓库 2.2.3 仓库文件操作 2.2.4 多人协作 2.2.4.1 分…...
Bash 中的运算方式
目录 概述: 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc(计算器,支持浮点数) 6. awk(强大的文本处理工具,也可计算) 概述: Bash 本身只支持整数运算&am…...
NLP Word Embeddings
Word representation One-hot形式 在上一周介绍RNN类模型时,使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的,算法很难学习到单词之间的关系。 比如下面的例子,即使语言模型已经知道orange juice是常用组合词…...
Unity UI个人总结
个人总结,太简单的直接跳过。 一、缩放模式 1.固定像素大小 就是设置一个100x100的方框,在1920x1080像素下在屏幕中长度占比1/19,在3840x2160,方框在屏幕中长度占比1/38。也就是像素长款不变,在屏幕中占比发生变化 2.…...
开发基础(8):鸿蒙图表开发
mpchart mpchart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,mpchart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。 柱状图 导入import {BarChart, …...
Vue的简单入门 一
声明:本版块根据B站学习,创建的是vue3项目,用的是vue2语法风格,仅供初学者学习。 目录 一、Vue项目的创建 1.已安装15.0或更高版本的Node.js 2.创建项目 二、 简单认识目录结构 三、模块语法中的指令 1.v-html 1.文本插值…...
vs2022支持.netframework4.0
下载nuget包 .netframework4.0 解压nuget 复制到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 参考 https://www.cnblogs.com/bdqczhl/p/18670152 https://blog.csdn.net/xiaomeng1998_/article/details/135979884...
[前端] axios网络请求二次封装
一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用,提高可维护性。 —这个有两个方案:一个是二次封装一个是实例化。(设置一些公共的参数,然后进行请求) 为什么可以解决代码的复用: 这是…...
前端包管理器的发展以及Npm、Yarn和Pnpm对比
在现代前端开发中,包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展,开发者经历了从 npm 一统天下到 Yarn 挑战格局,再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器(npm/Yarn/pnpm)进行全方位…...
城电科技| 光伏太阳花:让绿色能源随处绽放
在追求绿色可持续发展的今天,清洁能源设备不断涌现,城电科技的光伏太阳花便是其中的佼佼者。它不仅造型独特美观,更凭借出色的性能,在多个场景中都能发挥重要作用。那么,这款神奇的光伏太阳花究竟适合安装在哪里呢&…...
LVS集群(DR/NAT)
特性NAT 模式DR 模式工作原理Director 修改请求/响应的 IP 地址和端口,流量双向经过 DirectorDirector 仅修改请求的 MAC 地址,响应由 Real Server 直接返回客户端性能较低(需处理双向流量,易成瓶颈)高(仅处…...
保姆级GitHub大文件(100mb-2gb)上传教程
GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...
【Jenkins流水线搭建】
Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...
linux 安装ftp
1、安装vsftpd sudo yum install -y vsftpd 2、运行以下命令,启动FTP服务,并设置开机自启动。 sudo systemctl start vsftpdsudo systemctl enable vsftpd 3、运行以下命令,查看FTP服务监听的端口。 sudo netstat -antup | grep ftp 出现…...
DDoS技术解析
这里是Themberfue 今天我们不聊别的,我们聊聊著名的网络攻击手段之一的 DDoS,看看其背后的技术细节。 DoS 了解 DDoS 前,先来讲讲 DoS 是什么,此 DoS 而不是 DOS 操作系统啊。1996年9月6日,世界第三古老的网络服务提供…...
移远通信边缘计算模组成功运行DeepSeek模型,以领先的工程能力加速端侧AI落地
近日,国产大模型DeepSeek凭借其“开源开放、高效推理、端侧友好”的核心优势,迅速风靡全球。移远通信基于边缘计算模组SG885G,已成功实现DeepSeek模型的稳定运行,并完成了针对性微调。 目前,该模型正在多款智能终端上进…...
Linux | 进程相关概念(进程、进程状态、进程优先级、环境变量、进程地址空间)
文章目录 进程概念1、冯诺依曼体系结构2、进程2.1基本概念2.2描述进程-PCB2.3组织进程2.4查看进程2.5通过系统调用获取进程标识符2.6通过系统调用创建进程-fork初识fork の 头文件与返回值fork函数的调用逻辑和底层逻辑 3、进程状态3.1状态3.2进程状态查看命令3.2.1 ps命令3.2.…...
站群服务器和普通服务器有哪些不同之处?
站群服务器是一个集中管理工具,可以允许网站管理员同时管理多个网站,但是不要管理员登录每一个网站的后台,在站群模式下,网站管理员通过一个或者多个服务器来托管大量的子站点,可以支持大规模网站的集中管理和优化。 普…...
百度千帆平台对接DeepSeek官方文档
目录 第一步:注册账号,开通千帆服务 第二步:创建应用,获取调用秘钥 第三步:调用模型,开启AI对话 方式一:通过API直接调用 方式二:使用SDK快速调用 方式三:在千帆大模…...
DeepSeek帮助解决Oracle死锁问题
最近在生产上遇到一个死锁问题,Oracle 抛出了 ORA-000060 异常。 业务场景:程序按行读取一个上游系统送的文件数据(大概有几万行),读取到数据后,每 500 行分配给一个线程去批量更新数据库(使用…...
MySQL无法连接到本地localhost的解决办法2024.11.8
问题描述:我的MySQL可以远程连接服务器,但无法连接自己的localhost。 错误提示: 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因: 1. 检查环境变量是否正确:发现没…...
Nginx之rewrite重写功能
目录 一、rewrite概述 1、rewrite功能 2、跳转场景 二、标准配置指令 1、rewrite日志记录指令 2、未初始化变量告警日志记录指令 3、rewrite 指令 3.1 正则表达式 三、rewrite模块使用实例 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3.?基于旧域名跳转到新域名后…...
Selenium WebDriver自动化测试(扩展篇)--Jenkins持续集成
文章目录 一、引言二、Jenkins简介三、安装部署Jenkins安装部署四、集成Git与Maven安装必要的插件配置Git配置Maven五、创建Job创建自由风格的项目配置源码管理配置构建触发器配置构建环境配置构建步骤配置Post-build Actions六、触发构建示例:GitHub Webhook触发构建七、封装…...
MyBatis拦截器终极指南:从原理到企业级实战
在本篇文章中,我们将深入了解如何编写一个 MyBatis 拦截器,并通过一个示例来展示如何在执行数据库操作(如插入或更新)时,自动填充某些字段(例如 createdBy 和 updatedBy)信息。本文将详细讲解拦…...
DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏
DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器,可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API,开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…...
linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上
linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本,即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...
【工业安全】-CVE-2022-35555- Tenda W6路由器 命令注入漏洞
文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1:代码分析 4.2:流量分析 5.poc代码: 1.漏洞描述 漏洞编号:CVE-2022-35555 漏洞名称:Tenda W6 命令注入 威胁等级:高危 漏洞详情࿱…...
twisted实现MMORPG 游戏数据库操作封装设计与实现
在设计 MMORPG(大规模多人在线角色扮演游戏)时,数据库系统是游戏架构中至关重要的一部分。数据库不仅承担了游戏中各种数据(如玩家数据、物品数据、游戏世界状态等)的存储和管理任务,还必须高效地支持并发访…...
【MySQL】基础篇
1. MySQL中的NULL值是怎么存放的? MySQL的compact行格式中会用【NULL值列表】来标记值为NULL的列,NULL值不会存储在行格式中的真实数据部分。 NULL值列表会占用1字节空间,当表中所有字段都被定义成NOT NULL,行格式中就不会有NULL值…...
【自学笔记】机器学习基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 机器学习重点知识点总览一、机器学习基础概念二、机器学习理论基础三、机器学习算法1. 监督学习2. 无监督学习3. 强化学习 四、机器学习处理流程五、机器学习常见问…...
记录阿里云CDN配置
网站接入CDN全流程,共4步!-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点: 1. 域名和泛域名区别 2.开启https,要用nginx的证书,和项…...
同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展
1 2025开年,人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸,不仅在国内掀起了技术热潮,并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球,这不仅重塑了产业格…...
聚铭网络入围2025年度江苏省政府采购信息安全设备协议供货名单
近日,2025年度江苏省党政机关、事业单位及团体组织信息安全设备框架协议采购项目入围结果公布。聚铭网络凭借自身专业实力和技术优势脱颖而出,成功入围22个分包。 此次采购项目是江苏省政府采购领域级别最高、覆盖面最广的项目之一。从资格评选到后期材料…...
【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 🏠 yum 🎸 什么是yum 当用户想下载软…...
leetcode 297. 二叉树的序列化与反序列化
题目如下 我们常常说单独先序遍历不能完整的表示一棵树是有前提条件的。 为什么?先序遍历是按 根节点 左子树 右子树的方向遍历树且遇到空子树直接返回,这样会造成我们并不知道某个节点的左右子树存在与否,故我们无法确定树的形状。但是如果…...
OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点
对于 ChatGPT 的免费用户,将可以无限制地访问 GPT-5,但仅限于标准的智能级别。该级别会设定滥用限制,以防止不当使用(意思就是你得付费嘛)。 OpenAI CEO Sam Altman 今天在 X 上透露了 GPT-4.5 和 GPT-5 的最新发展计划。 OpenAI 将发布代…...
Ubuntu22.04 使用useradd 创建用户时,没有创建家目录时,如何手动创建家目录
测试案例: 使用useradd不加参数创建test目录 如下可以看出使用 useradd 创建用户的时候默认不会创建家目录 rootlocal:~# useradd test rootlocal:~# id test uid1001(test) gid1001(test) groups1001(test) rootlocal:~# cat /etc/passwd | grep test test:x:1001:…...
浅聊Docker使用、部署
在Java面试中,当被问到关于Docker中间件的使用、部署及在实际项目中的考虑时,可以按照以下结构和内容来详细回答: 一、Docker中间件的使用 1. Docker是什么? Docker是一个开源平台,允许开发者将应用程序及其依赖项打…...
Java面试第一山!《集合》!
一、引言 在 Java 编程的世界里,数据的存储和处理是非常重要的环节。Java 集合框架就像是一个功能强大的工具箱,为我们提供了各种各样的数据结构来高效地存储和操作数据。今天,跟随小编一起来深入了解 Java 集合框架,这不仅有助于…...
力扣-二叉树-257 二叉树的所有路径
思路 除去根节点,每一层添加->val,然后使用前序遍历的顺序 代码 class Solution { public:vector<string> res;void getTreePaths(string s, TreeNode* root){s "->";s to_string(root->val);if(root->left nullptr &…...
异构计算架构助力智能座舱实现高效低耗体验
摘要: 随着智能汽车的飞速发展,智能座舱作为人车交互的核心区域,对算力、功耗及延迟等性能指标提出了严苛要求。异构计算架构凭借在硬件、软件与系统层面的深度优化,能显著提升智能座舱的算力利用率,降低功耗与延迟,为用户打造高效、低能耗的智能座舱体验。本文深入剖析…...
【vscode】VScode Remote SSH配置
VScode使用remote ssh 到服务器上的Docker容器中 1. 配置远程服务器docker容器的端口映射,例如将服务器的2222端口映射到container的22端口(默认) 1.1 在容器系统的sshd_config文件中配置参数 #配置文件 vim /etc/ssh/sshd_config #打开端口号 Port 221.2 建立容…...
急停信号的含义
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…...
【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (10) – UC 使用 前言 由于ADB 的更新速度很快,在几个月之后重新搭建ADB 时发现UC 已经更新了很多,为了后续做ADB 的功…...
MYSQL批量UPDATE的两种方式
工作中遇到批量更新的场景其实是比较常见的。 但是该如何正确的进行批量UPDATE,很多时候往往有点头大。 这里列2种可用的方式,供选择(请选择方式一,手动狗头。)。 如果使用了MyBatis增强组件MyBatisPlus 如果使用了MyBatisPlus,…...
百度宣布:免费!
2月13日,百度大模型文心一言在官网宣布,随着文心大模型的迭代升级和成本不断下降,文心一言将于4月1日起全面免费,所有PC端和APP端用户均可体验文心系列最新模型。 同时,文心一言将上线深度搜索功能,具备更…...
计算机毕业设计SpringBoot+Vue.js医院住院管理系统(源码+lw文档+PPT+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Anaconda +Jupyter Notebook安装(2025最新版)
Anaconda安装(2025最新版) Anaconda简介安装1:下载anaconda安装包2: 安装anaconda3:配置环境变量4:检查是否安装成功5:更改镜像源6:更新包7:检查 Jupyter Notebook一.Jup…...
人工智能任务21-飞蛾火焰优化算法(MFO)在深度学习中的应用
大家好,我是微学AI,今天给大家介绍一下人工智能任务21-飞蛾火焰优化算法(MFO)在深度学习中的应用。飞蛾火焰优化算法(Moth-Flame Optimization, MFO)是一种受自然界中飞蛾向光源趋近行为启发的新型群体智能优化算法。在自然界中&a…...
渗透测试工具:SQLmap安装教程及使用
在渗透测试的世界里,SQL注入攻击无疑是最常见且最具威胁的安全漏洞之一。幸运的是,SQLmap 这个强大的自动化工具,能够帮助我们快速识别和利用这些漏洞。如果你也想了解如何用 SQLmap 进行渗透测试,那么这篇文章就是为你准备的&…...