git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统,版本控制最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
能够使个人开发过渡到团队协作
CVS、SVN、VSS等都是集中化的版本控制系统,都有一个单一的集中管理的服务器,保存所有的文件修订版本,而协同工作的人们都可以通过客户端连接到这台服务器(团队员工要修改文件只能连接服务器,在服务器上面修改),取出最新的文件或者提交更新。这种做法带了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松地掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。但问题也显而易见,这么做容易引发中央服务器的单点故障。
像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库),这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。分布式版本控制的出现,解决了集中式版本控制系统的缺陷
- 服务器断网的情况下也可以进行开发(因为版本控制上在本地进行的)
- 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
如下图,红色的框是我们的工作区,也就是代码在我们本地所在的磁盘位置,通过git add命令可以将我们的代码放入本地的暂存区,暂存区用来临时保存我们的代码。然后使用git commit命令将我们暂存区的代码提交到本地版本仓库,此时代码就在git的本地参考完成了更新,通过push命令可以将我们本地的版本推送到远程的版本控制库。
代码托管中心是基于远程服务器的远程代码仓库,一般我们简单称为远程库
局域网代码托管中心:
GitLab
互联网代码托管中心:
GitHub(外网)
Gitee(国内)
GIt官网地址
在GIt官网主页点击Download,选择与我们本地参数适配的版本下载即可,我这里演示mac的安装流程
命令名称 | 作用 |
---|---|
git config --global user.name | 设置用户签名 |
git config --global user.email | 设置用户签名 |
git init | 初始化本地仓库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
签名的作用是区分不同操作者的身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置用户签名。(这里设置的用户签名和将来登录github的账号没有任何关系)
git config --global user.name jakiechai #设置用户名为jakichai
git config --global user.email 2012126846@qq.com #设置用户邮箱为[email protected]
git如果要管理我们的某一个代码目录时我们就需要git获得这个目录的管理权,这就是初始化本地库的作用,下面我找了我本地的一个springBoot的项目,将其交给git托管:
git init
git的相关目录默认是隐藏的,我们查看 git管理后目前该文件夹的内容
git status
git add touchssm
git commit -m "first commit" touchssm
我修改了touchssm下随意的一个文件,加了下面一句话
查看本地库状态
将修改后的文件添加到暂存区
暂存区的内容添加到本地仓库
git reflog #精简版
git log #详细版
如果我们绝对当前项目的版本不如原来的版本,我们可以让git当前维护的版本传梭到以前的版本(master指针会指向当前版本)
git reset --hard cbe70f3 #cbe70f3是我们要穿梭的版本号,可以用git reflog查看
查看我原先更改的文件内容,来确定我的版本是否更替:
在版本控制的过程中,同时推进多个任务,为每个任务,我们可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发线上分离来,开发自己的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(例如项目开发过程中,如果我先在正在推进主线工作,如果项目团队的其它人需要进行代码测试,这时候我们就可以创建分支,让测试员工在分支上面工作,这样就是不会影响主线的推进,同时又可以完成测试工作)
可以同时并行的推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout | 分支名 |
git merge | 把指定的分支合并到当前分支上 |
git branch -v
当前只有一个master分支
git branch hot-fix
切换到hot-fix分支
git checkout hot-fix
在hot-fix分支上修改readme.md
安装上面步骤提交更新内容到本地仓库,并查看更新结果
切换到master分支,查看readme的内容
git merge hot-fix
在合并分支时可能会遇到冲突问题,意思就是合并分支时,要合并的两个分支在同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个,这时候需要人为的决定新代码的内容,下面演示一下冲突问题的发生以及解决办法。
在master上修改readme.md
提交修改
切换到hot-fix分支并修改readme.md文件
提交修改
切换会master分支,并合并两个分支,发生冲突问题
开始手动合并解决分支问题,首先打开readme.md文件
在readme.md中保留我们要保留的内容,删除我们不要的内容保存即可达到手动更新
提交我们的更新内容到暂存区,然后执行提交,注意这时候使用git commit提交不能带文件名
一个团队内的成员是共享一个远程库的,所以团队内部只需要通过pull,push和clone等命令就可以实现代码的同步,达到团队内的协作
对于团队外合作,由于下面B公司员工不属于A团队的成员,所以他不能使用A团队的远程库,所以如果他要修该项目,需要首先通过fork命令 ,将A团队的项目代码拉取到自己的本地库,然后clone下来进行修改,修改完成后push到自己的远程库,同时发一个pull request命令到A团队的远程库,A团队的项目经过审核之后就可以将B公式员工的修改拉取到自己的 远程库,达到团队外协作。
Github是全球最大的同性交友网站,是技术宅男的天堂
注册三个账号来模拟团队内协作和团队外协作
创建别名的目的是由于远程库链接比较长,每次操作比较长,所以给远程库创建别名,下次使用远程库时直接使用别名即可
(下面我使用的是ssh方式,需要提前完成github的 ssh免密登录,由于我是m1这里我就不操作了)
git remote add ori [email protected]:chailong2/gittest.git #也可以直接使用链接
#这个地址是我的远程仓库的https地址
git remote -v# 查看别名
推送的单位是分支
git push ori master
github上查看效果
git pull [email protected]:chailong2/gittest.git master
发现内容已经修改成功,说明我们拉取成功
git clone [email protected]:chailong2/gittest.git
在创建idea项目时,常常会创建一些对项目部署和运行的没有太大作用的文件,我们需要配置Git忽略这些文件
*.class
*.log
*.ctxt
*.mtj.tmp/
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
*.idea
*.iml
hs_err_pid*
.classpath
.project
.settings
target
open ~/.gitconfig #打开gitconfig文件(仅限mac这么操作)
######
excludesfile=/Users/jackchai/Desktop/SpringBoot/git.ignore
找到设置中的git,填入git.exe所在的文件位置即可
在菜单栏的选中VCS,然后按下图操作即可
查看项目,会发现出现了.git文件
关于git中idea中各类文件颜色的含义:
绿色:已经加入了git控制,但是没有提交
红色:未有加入版本控制
蓝色:加入,已提交有改动
白色:加入,已提交无改动
灰色:版本控制已经忽略该文件
提交之后,绿色文件就会变成正常的黑色,表示文件已经提交到本地仓库
随便修改一个代码内容
鼠标右击指定文件,点击git下的add将文件添加到暂存区,然后点到git下的commit提交到本地仓库
使用idea查看版本信息,idea左下角有一个git,点击后即可查看所有的版本信息(head和master表示当前版本)
选择要切换的版本右击选择切换即可(下面我选择的是first commit版本)
验证切换结果
创建分支
方法一:指定要创建分支的项目,右击选择git下的Repository下的Branches,选择弹出框的创建选项,输入分支名即可创建成功
方法二:点击idea的右下角,选择添加新分支即可创建
切换分支
点击右下角的branches选择要切换的分支的,点击然后选择checkout即可切换
6. idea合并分支
在Idea窗口的右下角,将branch1合并到master
合并时的冲突问题解决
在branch1分支上修改
在master分支上修改
当前版本情况
idea手动解决合并分支发生冲突问题
冲突问题解决结果
在vcs中选择将项目分享到Github选项
在弹出框中选择share即可
Repository name:远程仓库名(和项目名保持一致)
Remote:远程地址别名
Decription:描述
方法一:项目名右击git->repository->push就行
方法二:vcs里面可以操作
方法三:点击箭头
和push的三个方法是一样的,操作的地方在一个位置,这个不细讲了
注意:push是将本地代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push的操作是会被拒绝的。也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交推送。
3. 克隆远程库到本地
方法一:进入idea时选择get from version control,然后填写url未远程库的地址就是
总所周知,GitHub服务器在国外,使用GItHub作为代码项目托管网站,如果网速不好的话,严重影响体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内项目托管网站-码云。码云是开源中国推出的基于GIt的代码托管服务中心,使用方式和GitHub一样,前面介绍的GitHub的操作方法都可以在gitee上面使用
直接点击新建仓库,然后填写相关信息即可
创建成功如下
在设置中选择plugins插件,搜索码云下载gitee插件重启idea即可
直接输入gitee登录账号
操作都和gitee是一样的,这里是直接将本地仓库分享到码云上,这样码云上面就会自动创建新的仓库,当然也可以直接在码云上面创建新仓库,然后将代码push到新仓库中即可,结果都是一样的。
gitee上面就会出现我刚刚分享的项目
码云可以直接将github上面的项目迁移到git中,操作很简单
首先在码云上面新建立仓库,然后选择导入已有仓库
开始拉取
查看结果
当然gitee的强大功能远不止这些,例如我们可以在码云上更新项目代码,然后级联更新github