Git的使用
版本控制
版本控制,也被称为源代码控制或源代码管理,是一种记录和管理项目文件变更的系统。它允许你回溯到项目的早期版本,查看历史更改,以及在多人协作的情况下合并不同人的更改。
版本控制系统通常有两种类型:
集中式版本控制系统(Centralized Version Control Systems,CVCS):如 SVN(Subversion),CVCS使用一个中央服务器来存储所有文件的修订版本,而开发者们则从中央服务器获取最新的版本进行开发,开发完成后再推送回中央服务器。
分布式版本控制系统(Distributed Version Control Systems,DVCS):如 Git 和 Mercurial,DVCS中的每个开发者都拥有一个完整的版本库,可以在本地进行大部分的版本控制操作,如提交更改、创建分支等,然后再将更改推送到其他版本库。
本地版本控制 是版本控制系统的一种最简单形式,它在单一的系统(例如你的个人电脑)上管理文件的不同版本。在最初的版本控制方法中,人们通常会复制整个项目目录以创建不同的版本。这种方法简单,但是非常容易出错。例如,你可能会忘记你正在哪个目录下工作,或者错误地复制了错误的目录。为了解决这个问题,人们开发了许多本地版本控制系统,这些系统在本地数据库中管理文件的不同版本。例如,RCS(Revision Control System)就是一种早期的本地版本控制系统,它在每个文件的同一目录下保存补丁集(即,与之前版本的差异)。
版本控制系统的主要优点包括:
- 追踪和记录每一次更改:你可以查看每一次更改的内容,谁做了这些更改,以及何时做的这些更改。 - 回滚更改:如果你发现某次更改引入了错误,你可以回滚到更改之前的版本。 - 并行开发:多个开发者可以同时在同一个项目上工作,然后合并各自的更改。 - 分支和合并:你可以创建分支进行实验或开发新功能,然后再将分支合并回主线。 - 代码审查:你可以查看和审查其他开发者的更改。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中会导致很多问题/如软件代码的一致性、软件内容的雍余、软件过程的事务性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合问题
Git和SVN的主要区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从服务器上得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络宽带要求较高。
而Git是分布式版本控制系统,没有中央服务器,每个人的电脑上就是一个完整的版本库,工作的时候不需要联网去拿最新的版本,因为版本都在自己的电脑上。协同的方法是:例如,自己在电脑上修改了A文件,其他人也在电脑上修改了A文件,这时,你们之间只需要把各自修改的推送给对方,就可以 看到对方的修改了
Git目前是世界上最先进的分布式版本控制系统
Git环境搭配
64-bit Git for Windows Setup (github.com)官网下载地址
官网下的很慢,去淘宝镜像下载
Git-2.41.0.3-64-bit.exe (npmmirror.com)
下载完之后直接无脑安装,下一步下一步就行,都是默认的。
启动Git
Git Bash:使用的命令行和linux相似,这是用的最多的,学习过linux的就会感到很简单
Git CMD : Windows风格的命令行
Git GUI:图形界面的,不推荐使用,先熟悉命令,以后级别==基本不怎么使用。
这里要会基本的linux命令,本人已经学过,毕竟是专业所,没学过的先熟悉一些基本命令。
一些git相关的命令
git config -l 查看全部配置
查看系统为我们配置了什么
git config --system --list
用户名和邮箱目前是空的,必须配置
git config --global --list
Git相关的配置文件︰
1 ) 、Git\etclgitconfig : Git安装目录下的gitconfig--system系统级
2 )、C:UsersAdministratorl .gitconfig只适用于当前登录用户的配置--global全局这里可以直接编辑配置文件,通过命令设置后会响应到这里。
没有修改的时候
修改设置用户和邮箱
使用命令行方式
git config --global user.name "zm" 设置用户名
git config --global user.email "3339332352@qq.com"
现在执行查看用户配置:git config --global --list
Git基本理论
Git本地有三个工作目录:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository)或Git Directory
如果再加上远程的git仓库(RepositoryDirectory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
Workspace:工作区,就是平时你存放代码的地方。
index/Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。
Repository:仓库区(或者本地仓库),就是安全存放数据的地方,这里有你提交的所有版本得到数据。其中HEAD指向最新放入仓库的版本。
Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑,用于远程数据交换,本地的三个区域确切的说应该是git仓库中HEAD指向的版本
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个命令:
本地仓库搭建
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
1、创建全新的仓库,需要用GIT管理的项目的根目录执行
#在当前目录新建一个Git代码库
$ git init
2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
克隆远程仓库
1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!
#克隆一个项目和它的整个代码历史(版本信息)
git clone [url]
2、去gitee或者github上克隆一个测试!
https://gitee.com/kuangstudy/kuang_livenote.git
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
git status 查看当前目录文件状态
有文件kuang_livenote/未被跟踪
git add . 把文件上传到暂存区
再次查看
提交到本地仓库
git commit -m ""new file hello.txt"
" 提交暂存区的内容到本地仓库 -m 提交信息
现在查看状态就是没有东西可以提交了
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等在主目录下建立".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它会自动生成的
使用码云Gitee
1、注册登录码云,完善个人信息;
2、设置本机绑定SSH公钥,实现免密码登录!
#进入c: \Users \Administrator\.ssh目录# 生成公钥
ssh-keygen
找到码云中的设置
找到SSH公钥
现在去生成一个公钥,进入c: \Users \用户名\.ssh
目录 生成公钥
在.ssh文件夹中打开git命令行输入ssh-keygen -t rsa 然后一路直接回车就行
3、将公钥信息public key添加到码云账户中即可!
打开这个
把里面的内容复制下来粘贴到码云上
然后点击提交就有公钥了
4、使用码云创建一个自己的仓库!
点击新建仓库
写上仓库名选择公开,然后选择语言开源许可证GLP3.0,git模板
这样就创建好了
现在把它克隆到本地
这里就过来了
跟远程的仓库一样
使用idea集成Git
1、新建项目,绑定Git;
自动生成的就有.gitignore文件
绑定Git
将我们远程的git文件目录拷贝到项目中即可
红色是为选中状态(未跟踪),绿色是选中状态(已跟踪 add),蓝色是改变状态(commint后又有了改变)
2、修改文件,使用IDEA操作git;
点击提交
3、提交测试
在终端提交
之后发现文件都会变成绿色,这是因为文件都已经添加到暂存区里了
现在去提交,提交之前必须先写好提交信息才能提交
查看Git控制台就能看见提交信息,在工作中一般写我们修改了什么代码
现在的远程仓库是没有刚才放在暂存区的文件的,所以需要push到远程仓库中
#可以直接在终端使用命令
git push
然后再去远程仓库刷新就有了
这个时候我们再去修改文件,新建一个类,idea就会弹窗问我们是否添加到Git
我们再次提交,然后提交到远程,建议还使用命令行
查看仓库信息
可以看到远程仓库上有idea的一些文件,我们可以在.gitignore中写不要这个文件
这些都是单个人的操作
Git分支
分支在GIT中相对较难,分支就像科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰。不过,在某个时问点,两个平行宇宙合并了,我们就需要处理一些问题了!
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
查看远程仓库分支 git branch -r
新建一个分支:git branch dev 这只是新建分支,但仍然停留在当前分支master
再次查看本地分支
也可以在idea中查看