赞
踩
在代码开发过程中,往往需要对源码进行多次的修改操作,这样一来同一份代码就产生了多个版本,在开发过
程中通常需要对这些多个版本代码进行管理,以便于在需要时进行 代码回滚、多版本间比较、多人协作开
发、代码分支、分支合并 等操作。
这样的需求大量的存在,而随着软件越来越复杂、代码越来越多、参与开发者越来越多,版本管理也变的越来
越有难度,此时就需要专业的软件来对版本进行管理,这个过程就称之为版本控制,实现版本控制的软件就称
之为版本控制软件。
Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编
写代码,那Linux的代码是如何管理的呢?
在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方
式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统
吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一
些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区
的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,
BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习
气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发
现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是!一个月之内,Linux系统的源码已经由
Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git
存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git
了。
将每一个管理的文件夹看成workspace(工作空间,相当于idea管理的一个项目)
用法:
git init
创建了一个当前工作空间的本地库.
idea中有git插件,一般不需要执行git init
在多人协作中,每人负责的内容不一样,为了方便管理大家上传,修改,删除的操作步骤和历史版本,一般每个用户都会配置自己的开发人员信息.
用法:
用户级别的配置
git config user.name [xiao]
git config user.email **@qq.com]
全局级别的配置
git config --global user.name
git config --global user.email
git仓库模型,理论基础
在工作区修改添加文件,做项目开发,大量文件代码发生变动.
可以将变动的文件添加到暂存区.
用法:
git add [文件]
文件必须是工作区的文件.可以使用* 代表所有文件.
idea操作add
idea发现某些项目是git仓库的话,在创建项目代码时,修改项目代码时,都会提示
是否自动add.
观察工作空间的文件变动的情况
用法:
git status
idea用法:暂无
执行git命令,将暂存区的内容,添加到版本库的分支区.
一旦添加到分支区,当前的数据,永不丢失.
用法:
git commit -m "描述信息"
idea操作
commit提交的版本,每一个版本都默认生成一个唯一字符串作为版本号存在.
可以通过log命令,查看当前版本库中信息.
用法:
git log
idea log功能更强大
在commit多次提交的version版本中,我们可以从一个当前版本跳转回滚到另一个版本.
用法
git reset [--hard|soft|mixed] version版本号
选项是有默认值的.–mixed.
idea的操作
一旦选择回滚,在git log命令中,就看不到后续的版本了.
如果想要回滚回去(逻辑上讲,不会出现这种操作)
idea 操作 对比版本区别
用法
git tag 标签名 版本号
如果在当前版本之后有很多版本(因为回退),想查看后面版本 git log做不到
可以使用git reflog
用法:
git reflog
分支,为了避免同一个仓库,多人协作开发时,重复,冗余解决文件冲突问题,引出的一个git特性-分支.
默认情况下,每个git仓库有一个默认分支 master.
用法:
git branch 新分支名称
在git仓库分支区就会多出一个分支区名字 新分支名字.和执行命令时所在的分支,共享同一个版本作为 base version
注意: 新学习git的时候,切换分支之前,先提交版本,不在工作区和暂存区有一些新变化的时候切换.
用法:
git checkout 目标分支名称
通过上述两个命令,创建分支,切换分支,就可以在不同分支.
在master和branch1中分别提交一个版本,最终分支的结构
在git中可以通过命令查看当前git仓库的所有分支,和正在使用的分支.
用法:
git branch
分支开发完毕,可以将分支进行合并,所有版本合并到一起
执行合并命令,分清楚谁合并到谁
用法:
git merge 目标分支
目标分支的意思并不是合并到的分支,而是要拉过来合并的那个分支.
执行merge命令所在分支,是合并到的分支.
在master执行merge合并,最终版本 ,分支的关系
如果继续在branch1中合并master,分支结构图
冲突一定是出现在以下条件里的:
同时满足上述2个条件,就需要在merge的时候解决冲突问题
解决冲突有2中
用法:
git merge branch1
由于冲突存在.
合并暂停,git会在冲突的文件中,给标记对应冲突内容,需要人为的手动调整.
调整完成后,合并继续
git add *
git merge --continue
合并后,git跳转到一个日志文件,记录合并的过程
涉及到linux命令操作.从文件中退出
推荐使用idea,更智能,更方便.
一旦出现冲突,idea会自动提出解决冲突的方案
三个选择方案前两种,保留当前分支内容,或保留目标分支内容
第三种方案 手动调整.
团队做开发的时候,每个人都管理自己的本地版本.
如果是协作开发,应该是每人负责不同的项目功能,最终合并到一起使用.
多个git仓库的管理工作,涉及到一个概念–远程仓库
git中提到去中心化的概念.
svn典型软件
每个人只管理自己的内容.
最终都在中心服务器进行代码的整理.
存在缺点
git典型的软件之一.(最终使用的感受,还是中心化)
git存在中心托管仓库的概念,实际上是不需要个人电脑实现远程仓库的角色的.
github(国内慢,资源非常多)
gitee(国内的github)
gitlab 公司内部服务器(代码不开源)
选择新建仓库
填写仓库信息
在gitee中默认创建的仓库是私有仓库(创建的用户才能使用)
准备好托管远程仓库,内容是空的.
本地创建一个项目
在项目中准备好git本地仓库,可以和远程仓库做关联,然后 pull/push了.
用法:
git remote
查看本地仓库关联的远程仓库.
git remote add 远程仓库名称 远程仓库git地址
git remote add abc https://gitee.com/xiaolao
shi2021/project-01.git
push命令,将本地分支版本推送到远程仓库.push如果有冲突,需要先解决冲突(pull)
在远程仓库中也有分支
用法:
git push 远程仓库的名称 本地分支:远程分支
我要将,本地分支 推送到abc这个远程仓库的远程分支
git push abc master:main
如果多人协作,还有别人在main远程分支推送代码(如何在本地模拟多人协作连接同一个远程分支)
git pull 远程仓库名称 远程分支名称
git pull abc main
执行操作的时候,会先从远程中心 拉取main分支的版本,在和本地当前所在分支做merge合并.
git remote add 远程仓库名称 远程仓库git地址
git remote add abc https://gitee.com/xiaolao
shi2021/project-01.git
push命令,将本地分支版本推送到远程仓库.push如果有冲突,需要先解决冲突(pull)
在远程仓库中也有分支
用法:
git push 远程仓库的名称 本地分支:远程分支
我要将,本地分支 推送到abc这个远程仓库的远程分支
git push abc master:main
如果多人协作,还有别人在main远程分支推送代码(如何在本地模拟多人协作连接同一个远程分支)
git pull 远程仓库名称 远程分支名称
git pull abc main
执行操作的时候,会先从远程中心 拉取main分支的版本,在和本地当前所在分支做merge合并.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。