Git的使用

版本控制

版本控制,也被称为源代码控制或源代码管理,是一种记录和管理项目文件变更的系统。它允许你回溯到项目的早期版本,查看历史更改,以及在多人协作的情况下合并不同人的更改。

版本控制系统通常有两种类型:

  1. 集中式版本控制系统(Centralized Version Control Systems,CVCS):如 SVN(Subversion),CVCS使用一个中央服务器来存储所有文件的修订版本,而开发者们则从中央服务器获取最新的版本进行开发,开发完成后再推送回中央服务器。

    image-20230802085912996

  2. 分布式版本控制系统(Distributed Version Control Systems,DVCS)如 Git 和 Mercurial,DVCS中的每个开发者都拥有一个完整的版本库,可以在本地进行大部分的版本控制操作,如提交更改、创建分支等,然后再将更改推送到其他版本库。

    image-20230802090336905

  3. 本地版本控制 是版本控制系统的一种最简单形式,它在单一的系统(例如你的个人电脑)上管理文件的不同版本。在最初的版本控制方法中,人们通常会复制整个项目目录以创建不同的版本。这种方法简单,但是非常容易出错。例如,你可能会忘记你正在哪个目录下工作,或者错误地复制了错误的目录。为了解决这个问题,人们开发了许多本地版本控制系统,这些系统在本地数据库中管理文件的不同版本。例如,RCS(Revision Control System)就是一种早期的本地版本控制系统,它在每个文件的同一目录下保存补丁集(即,与之前版本的差异)。

    image-20230802085845638

版本控制系统的主要优点包括:

- 追踪和记录每一次更改:你可以查看每一次更改的内容,谁做了这些更改,以及何时做的这些更改。 - 回滚更改:如果你发现某次更改引入了错误,你可以回滚到更改之前的版本。 - 并行开发:多个开发者可以同时在同一个项目上工作,然后合并各自的更改。 - 分支和合并:你可以创建分支进行实验或开发新功能,然后再将分支合并回主线。 - 代码审查:你可以查看和审查其他开发者的更改。

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中会导致很多问题/如软件代码的一致性、软件内容的雍余、软件过程的事务性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合问题

image-20230802084935380

Git和SVN的主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从服务器上得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络宽带要求较高。


而Git是分布式版本控制系统,没有中央服务器,每个人的电脑上就是一个完整的版本库,工作的时候不需要联网去拿最新的版本,因为版本都在自己的电脑上。协同的方法是:例如,自己在电脑上修改了A文件,其他人也在电脑上修改了A文件,这时,你们之间只需要把各自修改的推送给对方,就可以 看到对方的修改了

Git目前是世界上最先进的分布式版本控制系统

Git环境搭配

Git - 安装 Git (git-scm.com)官网

64-bit Git for Windows Setup (github.com)官网下载地址

官网下的很慢,去淘宝镜像下载

Git-2.41.0.3-64-bit.exe (npmmirror.com)

image-20230802093240553

下载完之后直接无脑安装,下一步下一步就行,都是默认的。

image-20230802100404047

启动Git

  • Git Bash:使用的命令行和linux相似,这是用的最多的,学习过linux的就会感到很简单

  • Git CMD : Windows风格的命令行

  • Git GUI:图形界面的,不推荐使用,先熟悉命令,以后级别==基本不怎么使用。

这里要会基本的linux命令,本人已经学过,毕竟是专业所,没学过的先熟悉一些基本命令。

一些git相关的命令

git config -l  查看全部配置

image-20230802095209824

查看系统为我们配置了什么

git config --system --list

image-20230802095427051

用户名和邮箱目前是空的,必须配置

git config --global --list

494616511651

Git相关的配置文件︰

1 ) 、Git\etclgitconfig : Git安装目录下的gitconfig--system系统级

image-20230802100348902

2 )、C:UsersAdministratorl .gitconfig只适用于当前登录用户的配置--global全局这里可以直接编辑配置文件,通过命令设置后会响应到这里。

image-20230802100329918

没有修改的时候

image-20230802100534039

修改设置用户和邮箱

image-20230802100637695

使用命令行方式

git config --global user.name "zm"  设置用户名
git config --global user.email "3339332352@qq.com"

现在执行查看用户配置:git config --global --list

image-20230802100723858

Git基本理论

Git本地有三个工作目录:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository)或Git Directory

如果再加上远程的git仓库(RepositoryDirectory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

image-20230802103821055

  • Workspace:工作区,就是平时你存放代码的地方。

  • index/Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。

  • Repository:仓库区(或者本地仓库),就是安全存放数据的地方,这里有你提交的所有版本得到数据。其中HEAD指向最新放入仓库的版本。

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑,用于远程数据交换,本地的三个区域确切的说应该是git仓库中HEAD指向的版本

    image-20230802104736753

  • Directory: 使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。. WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。. .git:存放Git管理信息的目录,初始化仓库的时候自动创建。

  • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。.

  • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支( branch ) 。

  • Stash :隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

Git的工作流程

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态︰已修改( modified ) ,已暂存( staged ) ,已提交(committed)

Git项目搭建

创建工作目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。日常使用只要记住下图6个命令:

dfgdsfg

本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

1、创建全新的仓库,需要用GIT管理的项目的根目录执行

#在当前目录新建一个Git代码库
$ git init

2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

image-20230802105802382

image-20230802105843324

克隆远程仓库

1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!

#克隆一个项目和它的整个代码历史(版本信息)
git clone [url]

2、去gitee或者github上克隆一个测试!

https://gitee.com/kuangstudy/kuang_livenote.git

image-20230802111435007

image-20230802111324844

Git文件操作

文件4种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制.通过git add状态变为 staged

  • Unmodify:文件已经入库,未修收,即版本库中的文件快照内容与文件夹中完全一致.这种类型的文件有两种去处,如果它被修改,而变为_Modified .如果使用git rm移出版本库,则成为untracked文件

  • ·Modified:文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout则丢弃修改过,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!

  • Staged:暂存状态.执行 git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为unmodify状态.执行git reset HEAD filename取消暂存,文件状态为Modified

image-20230802113007061

git status  查看当前目录文件状态

ertdfg24234

有文件kuang_livenote/未被跟踪

git add .  把文件上传到暂存区

sfgdg353

再次查看

image-20230802113208919

提交到本地仓库

git commit -m ""new file hello.txt"
" 提交暂存区的内容到本地仓库 -m 提交信息

image-20230802151422330

现在查看状态就是没有东西可以提交了

image-20230802151543834

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等在主目录下建立".gitignore"文件,此文件有如下规则︰

1.忽略文件中的空行或以井号(# )开始的行将会被忽略。

2可以使用Linux通配符。例如∶星号(*)代表任意多个字符,问号( ﹖)代表一个字符,方括号([abc] )代表可选字符范围,大括号( {string1,string2.…})代表可选的字符串等。

3.如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。

4.如果名称的最前面是一个路径分隔符(/ ),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

5.如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

#为注释
*.txt   #忽略所有.txt结尾的文件
!lib.txt   #但lib.txt除外
/temp  #仅忽略项目根目录下的TODo文件,不包括其它目录temp
build/  #忽略build/目录下的所有文件
doc/* .txt   #会忽略 doc/notes.txt但不包括doc/server/arch.txt

在idea中可以按照这个就行,idea它会自动生成的

image-20230802152556226

image-20230802152702106

使用码云Gitee

1、注册登录码云,完善个人信息;

2、设置本机绑定SSH公钥,实现免密码登录!

#进入c: \Users \Administrator\.ssh目录# 生成公钥
ssh-keygen

找到码云中的设置

image-20230802153744142

找到SSH公钥

image-20230802153824825

sgfdfgsdfgege

现在去生成一个公钥,进入c: \Users \用户名\.ssh目录 生成公钥

在.ssh文件夹中打开git命令行输入ssh-keygen -t rsa 然后一路直接回车就行

image-20230802154731355

3、将公钥信息public key添加到码云账户中即可!

打开这个

46565116511200

把里面的内容复制下来粘贴到码云上

image-20230802155109280

然后点击提交就有公钥了

image-20230802155625641

4、使用码云创建一个自己的仓库!

点击新建仓库

image-20230802155754155

写上仓库名选择公开,然后选择语言开源许可证GLP3.0,git模板

image-20230802160530079

这样就创建好了

image-20230802160617406

现在把它克隆到本地

66510151

afsdfa34534sdf

这里就过来了

szfs234sdf

跟远程的仓库一样

使用idea集成Git

1、新建项目,绑定Git;

image-20230802161547421

image-20230802161836923

自动生成的就有.gitignore文件

image-20230802161734472

绑定Git

将我们远程的git文件目录拷贝到项目中即可

asdf

image-20230802162225086

image-20230802162635335

红色是为选中状态(未跟踪),绿色是选中状态(已跟踪 add),蓝色是改变状态(commint后又有了改变)

2、修改文件,使用IDEA操作git;

点击提交

image-20230802163004416

image-20230802163137285

3、提交测试

在终端提交

image-20230802163408097

之后发现文件都会变成绿色,这是因为文件都已经添加到暂存区里了

image-20230802163527398

现在去提交,提交之前必须先写好提交信息才能提交

image-20230802163811912

查看Git控制台就能看见提交信息,在工作中一般写我们修改了什么代码

image-20230802163918240

现在的远程仓库是没有刚才放在暂存区的文件的,所以需要push到远程仓库中

#可以直接在终端使用命令
git push

41651651

然后再去远程仓库刷新就有了

image-20230802164512541

这个时候我们再去修改文件,新建一个类,idea就会弹窗问我们是否添加到Git

image-20230802164753333

我们再次提交,然后提交到远程,建议还使用命令行

image-20230802165228811

查看仓库信息

gsdfgd53dg

sdtgsd3453df

可以看到远程仓库上有idea的一些文件,我们可以在.gitignore中写不要这个文件

image-20230802165340821

这些都是单个人的操作

Git分支

分支在GIT中相对较难,分支就像科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰。不过,在某个时问点,两个平行宇宙合并了,我们就需要处理一些问题了!

image-20230802165754679

image-20230802170408878

git分支中常用指令:

#列出所有本地分支
git branch

#列出所有远程分支
git branch -r

#新建一个分支,但依然停留在当前分支
git branch [branch-name]

#新建一个分支,并切换到该分支
git checkout -b [branch]

#合并指定分支到当前分支
git merge [branch]

#删除分支
git branch -d [branch-name]

#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

多个分支如果并行执行,就会导致我们代码不冲突,也就是同时存在多个版本!

web-api -A ( Restful.xx() )

web-admin - B会调用A(修改了A的代码!)

web-app -C会调用B和A的代码

如果同一个文件在合并分支时都被修改了则会引起冲突∶解决的办法是我们可以修改冲突文件后重新提交!

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

查看本地分支 git branch

asfarwrr67y5g5

查看远程仓库分支 git branch -r

image-20230802171134811

新建一个分支:git branch dev 这只是新建分支,但仍然停留在当前分支master

image-20230802171251162

再次查看本地分支

image-20230802171328986

也可以在idea中查看