版本控制系统git和svn
目录
2)将工作区的文件提交到本地暂存区和本地库---git add 和git commit命令
4)回退到哪个版本---使用git reset --hard命令
5)删除操作---rm命令、找回本地删除的文件(即执行回退到哪个版本---使用git reset命令)
4)合并branch01分支到master分支以及出现了合并冲突的解决方法
2、将本地库中的内容推送到远程库 ----操作人员A
5、创建远程版本库的人员A邀请开发人员B到开发团队中的方法,邀请以后,开发人员B在push的时候登录自己的GitHub账户即可推送到A创建的远程库中去
6、开发人员A从A创建的远程库中拉取B做的修改---方法一:先使用fetch后使用merge
7、开发人员A从A创建的远程库中拉去B做的修改---方法二:直接使用pull命令
8、开发人员A和开发人员B同时操作一个文件的同一行引发的推送冲突的问题
10、免密码操作---解决每次push操作的时候都会让输入GitHub账号和密码的问题
一、版本控制系统的综述
1、集中化的版本控制系统---SVN
2、分布式的版本控制系统---Git
3、SVN和Git的存储方式以及回退方法
二、分布式的版本控制系统---Git
1、基本概念介绍
a)Git的本地结构
b)分布式远程仓库
c)团队内部使用Git本地结构和远程仓库方法
d)跨公司或跨团队使用Git本地结构和远程仓库方法
2、Git基本命令
1)设置用户名和邮箱、本地仓库的初始化操作
2)将工作区的文件提交到本地暂存区和本地库---git add 和git commit命令
3)查看历史记录---git log、git reflog
a)方法一:使用git log
b)方法二:使用git log --pretty=oneline
c)方法三:使用git reflog 这样虽然索引号(第一列)短了,但是还是可以用的
4)回退到哪个版本---使用git reset --hard命令
git reset的其他参数含义(仅了解即可)
5)删除操作---rm命令、找回本地删除的文件(即执行回退到哪个版本---使用git reset命令)
3、分支
1)分支的概念
2)查看分支
a)在工作区下创建一个Test4.txt并提交到暂存区、本地库
b)将Test4.txt提交到暂存区和本地库---在Test4.txt所在的目录下右键--->Git Bash Here
c)查看当前分支,并创建分支branch01
且可以看到当前branch01分支和master分支的文件对应的索引号都是161c4b7,表明branch01分支中文件的内容和master分支中文件的内容是一样的。
d)切换到分支branch01,并更改Test4.txt中的内容,注意顺序!!!否则在branch01分支下是看不到的!!!且当前分支是branch01的话,此时做的修改master也是看不到的
然后再去更改Test4,txt中的内容:
修改内容后在branch01分支下提交到暂存区和本地库
e)切换到master分支,并更改Test4.txt的内容
在master分支下更改Test4.txt的内容
另外:可以看到切换到master分支后,在Test4.txt中是看不到branch01分支做的修改的:
然后在maser分支下保存到暂存区和本地库
f)合并master做的修改和branch01做的修改:注意必须是在master分支下做合并操作
什么时候合并冲突?
当两个分支在同一个文件下的同一个位置做修改了,再合并,此时就会出现合并冲突,可以看到此时Test4.txt中的内容为:
解决冲突的方法:
手动删除不想要的内容,然后再添加到maser的暂存区和本地库
三、远程库的操作GitHub
1、创建本地库、初始化等操作
a)初始化本地库
b)创建Demo.txt并提交到暂存区和本地库
c)在GitHub中创建一个远程仓库
第二步:输入信息
第三步:创建成功,复制地址
d)在Git中为该地址重新起一个名字
登录完毕后即可传送完成:
在E盘目录下--->右键打开Git Bash Here,表示不同的人员操作
复制地址,并执行如下命令:
执行命令:
之后本地文件:
然后再使用git remotr -v 查看别名情况:
然后开发人员B创建了新文件需要提交到开发人员A的远程库!!!
添加到本地库、远程库
所以上面的登录GitHub信息写错了,应该是写开发人员B的GitHub账户 ,上面的origin是开发人员A GitHub账户下的一个远程库地址的一个别名,因为开发人员B是克隆A的远程库,此时会自动为A的远程库地址起别名为origin
这是由于在一台电脑上做的操作的原因,删除本地缓存即可,接下来删除缓存
重新添加文件Demo3.txt
登录开发人员A的GitHub账户
在弹窗中输入你要邀请的人的GitHub账户
第n步:
登录开发人员B的GitHub账户
刷新完成后,接受邀请
之后再在/e/GitResp2 下打开git bash here,执行push操作:
需要注意的是开发人员B是克隆开发人员A的远程版本库的,所以origin是开发人员A远程库地址的别名,所以需要注意的是:
git push origin master是将开发人员B的master分支推送到开发人员A创建的远程库中去,但是按下回车后会让登陆GitHub账户,此时使用开发人员B的GitHub账户信息即可将开发人员B的master分支下的文件推送到origin对应的地址上去。
6、开发人员A从A创建的远程库中拉取B做的修改---方法一:先使用fetch后使用merge
在上面开发人员B克隆了A远程库中的文件,做了修改之后又上床到了A的远程库,此时A需要更新一下自己本地的文件
a)开发人员A可以登陆到自己的GitHub账户去查看是否有文件的改动,然后执行以下步骤
b)进入A所在的本地版本库,后右键打开Git,执行fetch操作
但此时只是将A的远程库的文件抓取到了A的本地库中,A的工作区并没有远程库的文件
c)执行merge操作
此时在A的工作区已经有了远程库中的文件
需要注意的是:在合并的中间可以在Git中使用命令查看远程库中的文件,如下:
最后再将分支切换回来
7、开发人员A从A创建的远程库中拉去B做的修改---方法二:直接使用pull命令
后回车即可
8、开发人员A和开发人员B同时操作一个文件的同一行引发的推送冲突的问题
a)开发人员A的操作---创建了一个Test.txt文件,并依次做了如下操作
<---开发人员A的工作区
b)开发人员B做了一个拉取操作
B的工作区域
c)开发人员B对Test.txt的第二行做了如下操作
并提交到了暂存区、本地库、A的远程库
d)开发人员A此时也对Test.txt文件的第二行做了修改,此时也想提交到A的远程库中去,执行如下操作
并提交到暂存区、本地库、A的远程库,但是发生了失败
此时A提交失败的解决方法:
A先拉取A远程库中的内容,手动解决冲突之后再推送
此时A的工作区文件的内容是包含了冲突信息的:
删除后:
之后再保存到暂存区、本地库、A的远程库
9、跨公司合作
以上假设A和B是在同一个公司1,A创建了远程GitHub仓库,现在假设C是公司2的开发人员C,现在C想要在A和B开发的代码基础上再做开发,需要执行如下步骤:
a)A发送自己团队的远程库地址给C
b)开发人员C利用A发送给他的远程库地址执行fork操作
b1)登录C的GitHub账户
b2)刷新完成后
b3)fork完成
C)开发人员C将C的GitHub仓库中的GitResp2中克隆下来
d)开发人员C做的修改
d2)执行推送操作,推送到C的GitHub账户下的仓库
e)此时C想将自己做的修改合并到A的远程库中去,方法如下:
e1)推送后,C先在自己的GitHub账户下做申请
e2)next
e3)next
e4)next
e5)公司1的开发人员A审核公司2的Cf发出的申请
e6)公司1的开发人员A可以给公司2的开发人员C留言,确认是否可以合并
e7)开发人员C确认
C再次回复
e8)A查看C做的修改,并通过C的请求
查看做的修改
合并按钮
最后
10、免密码操作---解决每次push操作的时候都会让输入GitHub账号和密码的问题
a)第一步
三次回车之后即可生成一个.ssh文件夹,如下
b)用notepad++打开id_rsa.pub文件,复制里面的内容
c)进入当前用户的GitHub账号,点击settings
d)点击SSH and GPG keys
e)点击New SSH key
f)粘贴刚刚复制的内容
上面的Title随便起名字
g)使用远程库的ssh地址执行push操作
g1)先获取到远程库的ssh地址,并复制
g2)给ssh地址起别名,并使用该别名执行push操作
g3)查看别名,必须查看是否成功了
g4)创建一个Test100.txt文件,并使用ssh地址的origin_ssh执行push操作
以上博文的撰写工作是基于b站视频的讲解下完成的,向老师表示感谢
四、SVN的使用方法
1、SVN的安装
SVN客户端下载地址:https://tortoisesvn.net/downloads.html
同时也要下载中文语言包:
先安装客户端,一路点击下一步即可,然后安装中文包。
安装完成后,右键即可有如下的选择:
2、SVN的基本操作
点击确定之后会让填写用户名和密码,这里的用户名和密码就是你登陆网站使用的用户名和密码
确定之后即可检出完成
进入svn工作目录:
提交方法:
在中间的空白区域的方框中也可以添加提交描述,然后点击确定之后即可开始提交
修改一个文件,然后提交
右键->SVN提交
3、查看日志的方法
注意:在使用SVN提交之前,经常使用SVN更新,以防止冲突
4、不想提交某个文件的方法
点击确定后:
再次点击SVN提交,就没有SVN的图标了
新增加的某个文件如何忽略?例如此时新建了一个test.txt
方法如下:
执行完上面的操作后,也要执行一遍提交
5、SVN解决冲突方法
什么时候会出现冲突?
多个人同时修改了同一个文件的同一行
解决冲突的方法
解决冲突方法二:
然后弹出来下图:
关闭之后:
二进制文件冲突修改方法:
6、SVN分支
为什么要做分支?
隔离线上版本和开发版本
大功能开发,自己做的开发不想影响到别人,自己单独的做一个分支出去
SVN经典目录结构:
trunk--主干(相当于master)
branches--分支
tags--标签
分支即创建完成
但是上面的目录结构有一个问题,就是分支越来越多的话,更新就会很麻烦,于是可以单独的将branches和trunk检出出来
(1)将branches单独的拿出来
(2)将trunk单独的拿出来
(3)删除原来的文件夹---不删也行
(4)如何将分支做的提交,合并到主干中去?
(5)如何在已有了分支的基础上,再创建一个分支
如果想验证是否就是分支2,那可以双击svnbucket-onlinev1.0这个文件夹,然后右击->属性
(6)查看仓库的结构
教程网址:https://www.bilibili.com/video/BV1k4411m7mP?p=4&spm_id_from=pageDriver