300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 版本控制-Git/SVN

版本控制-Git/SVN

时间:2024-09-05 17:47:20

相关推荐

版本控制-Git/SVN

1.Git

1.Git是一个免费开源的分布式版本控制系统2.Git易于学习,占地面积小,性能极快,具有廉价的本地库,方便的暂存区域和多个工作流分支等特性3.Git性能优于Subversion(SVN)CVS等版本控制工具

1.版本控制

1.版本控制是一种记录工作内容变化,以便将来查阅特定版本修订情况的系统2.版本控制最重要的是可记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换

1.1.版本控制的原因

1.方便个人开发过渡到团队协作

1.2.版本控制工具

1.2.1.集中式版本控制工具

1.集中式版本控制工具有Subversion(SVN),CVS等2.集中式的版本控制工具都有一个单一的集中管理服务器,用于保存所有文件的修订版本,协同工作的用户都通过客户端连到该台服务器,取出最新的文件或提交更新3.优点:可以一定程度上查看项目中成员的进度,管理员可以掌握每个成员的权限,并且管理一个集中化的版本控制系统,比在各个客户端上维护本地数据库方便4.缺点:中央服务器会出现单点故障,如果服务器宕机,则宕机期间无法协同工作从而影响进度

1.2.2.分布式版本控制工具

1.分布式版本控制工具有GitMercurial等2.Git分布式版本控制工具中客户端提取的不是最新版本的文件快照,而是把远程代码仓库完整地镜像下来保存在本地库3.任何一处协同工作用的文件发生单点故障,都可以通过其他客户端的本地仓库进行恢复,因为每个客户端的每一次提取操作,实际上都是一次对整个文件仓库的完整备份4.分布式的版本控制系统出现了之后,解决了集中式版本控制系统的缺陷(单点故障造成系统瘫痪) 1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

2.工作机制

2.1.区域划分

1.Git版本控制工具可以划分为三个区域 1.工作区(workspace):项目代码存放本地磁盘的位置2.暂存区(Index / Stage):临时存放改动的代码,本质是一个文件(.git目录下的index文件),保存即将提交到本地库的信息3.本地库(local Repository):将暂存区中的代码提交到本地库,生成对应的历史版本(无法删除),下个版本基于上一个版本,所以无法删除中间的版本,其中HEAD指向最新放入仓库的版本 2.远程库(Remote Repository):远程仓库,托管代码的服务器,将本地库代码推送到远程库(Push)

2.2.工作流程

1.区域说明 1.左侧为工作区2.右侧为版本库3.版本库中标记为index的区域是暂存区(stage/index)4.版本库中标记为master的是master分支所代表的目录树5.版本库中标记为HEAD的是指向master分支的一个游标6.版本库中标记为objects的是Git的对象库,位于.git/objects目录下,其中包含创建的各种对象及内容 2.工作流程 1.当对工作区中修改或新增的文件执行git add命令时,暂存区的目录树被更新同时工作区修改或新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中2.当对暂存区中的内容执行提交操作git commit命令时,暂存区的目录树写到版本库中,master分支会做相应的更新,即master指向的目录树就是提交时暂存区的目录树3.当对暂存区中的内容执行回滚操作git reset HEAD 命令3.当对版本库中的内容进行回滚 时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。4.当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。5.当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。6.当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动7.我们使用 git clone 从现有 Git 仓库中拷贝项目 git clone git clone repo:Git 仓库。directory:本地目录比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:$ git clone git:///schacon/grit.git执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:$ git clone git:///schacon/grit.git mygrit

4.git忽略指定文件的提交

1.首先在git管理的文件夹根目录下创建一个名为.gitignore的文件2.然后将需要忽略的文件都放在这里3.注意:这种方式对应已经提交到git上面的文件石无法奏效的4.例如在.gitignore文件添加到git之前,.project文件已经托管提交给git了,那后面在.gitignore这个文件里添加.project表示忽略这个文件也不行,git依然会提交1.忽略某个已经托管给git的文件,防止二次提交2.这种情况适用于,每个人修改了项目的配置,但是这个是临时的,只适用于自己本地的情况,不可提交给大家公用时,需要这么做

# 执行命令将文件加入不提交队列git update-index --assume-unchanged 你的文件路径# 执行命令将文件取消加入不提交队列git update-index --no-assume-unchanged 你的文件路径

5.git提交忽略已加入版本库的文件

1.git rm --cached file当我们需要删除暂存区或分支上的文件,同时工作区 ‘不需要’ 这个文件,可以使用 ‘git rm’2.git rm file3.git commit -m ‘delete file’4.git push当我们需要删除暂存区或分支上的文件,但是本地 ‘需要’ 这个文件,只是 ‘不希望加入版本控制’,可以使用 ‘git rm --cached’1.git rm --cached file2.git commit -m ‘delete remote file’3.git push

3.3.基础配置

1.Git的设置一般使用git config命令 1.显示当前Git的配置信息:git config --list

2.编辑Git配置文件信息 1.git config -e: 针对当前仓库2.git config -e --global: 针对系统上所有仓库

$ git config --global user.name "runoob" #只对当前仓库有效$ git config --global user.email test@ # 对所有仓库都有效

3.代码托管中心

1.代码托管中心是基于网络服务器的远程代码仓库,一般简称远程库2.局域网:GitLab3.互联网:GitHub(外网),Gitee码云(国内网址)

4.Git安装步骤

1.注意需要安装到非中文并且没有空格的目录下2.安装后查看Git版本

git --version

5.Git命令

5.1.设置用户签名

1.git config --global user.name 用户名:设置用户签名2.git config --global user.email 邮箱:设置用户签名

3.验证签名文件(进入电脑的本地用户中,查看.gitconfig信息)

4.用户签名的作用:区分不同成员身份,成员的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交的来源,Git首次安装必须设置用户签名,否则无法提交代码5.注意:该设置用户签名和登录GitHub的账号没有任何关系

5.2.初始化本地库

1.基本语法

git init

2.初始化:Git管理目录获取Git目录的管理权,且初始化后会在初始化的目录中生成隐藏的.git文件夹,项目的快照数据都存放在该文件夹中

5.3.查看本地库状态

1.基本语法

git status

2.说明 1.第一行:本地库在哪个分支2.第二行:还没有提交内容3.第三行:没有内容需要提交(红色表示还没有提交到暂存区)

5.4.添加暂存区

1.基本语法

git add . //将所有文件都添加到暂存区git add *.c //将后缀为.c的文件添加到暂存区git add 文件名// 将指定文件添加到暂存区

2.将工作区中的文件添加到在暂存区(绿色表示已经提交到暂存区)

5.5.删除暂存区中的文件

1.基本语法

git rm --cached 文件名

2.该删除只是删除了暂存区中文件,而没有删除工作区中的文件

5.6.提交本地库

1.基本语法

git commit -m "日志信息" 文件名//Linux系统中,commit信息使用单引号;Windows系统中,commit信息使用双引号

2.将暂存区的文件提交到本地库

3.noting to commit,working tree clean表示暂存区没有东西需要提交

4.一行删除,一行添加,表示修改,先删除掉再添加进去

5.7.历史版本

1.基本语法

git reflog //查看版本信息git log //查看版本详细信息

5.7.1.查看历史记录

1.基本语法

git reflog

2.其中097e939和8d61690是7位简短版本号

5.7.2.查看日志

1.基本语法

git log

2.其中包括完全版本号,作者信息,日期和日志信息

5.7.3版本穿梭

1.基本语法

git reset --hard 版本号

2.进入Git版本目录文件的HEAD文件,指针指向master,说明当前是在master分支上

3.打开msater文件,该版本号指向第二个此修改历史记录,说明当前是在master分支下的第二修改版本

5.注意:Git切换版本,底层其实是移动的HEAD指针

6.Git分支

6.1.分支原理

1.版本控制过程中,同时推进多个任务,可以创建每个任务的单独分支2.使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行3.分支底层其实也是指针的引用

4.master是主线分支,从master复制一份到feature-blue上进行开发,开发完后,提交到master5.如果合并后导致问题,可以引入一个hot-fix(热修分支),把有问题的代码修改一下,如果没有问题再合并到master

6.2.分支好处

1.同时并行推进多个功能开发,提高开发效率2.各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可

6.3.分支的操作

1.git branch -a:查看所有分支(本地和远程)2.git branch:查看本地分支3.git branch -r:查看远程分支1.git branch -v:查看本地分支及最新的信息2.git branch 分支名:创建分支3.git chekout 分支名:切换分支4.git merge 分支名:把指定的分支合并到当前分支上

6.3.1.查看分支

1.基本语法

git branch -v

6.3.2.分支创建

1.基本语法

git branch 分支名

6.3.3.分支切换及修改

1.基本语法

git checkout 分支名

说明: 1.master,hot-fix其实都是指向具体版本记录的指针2.当前所在的分支,其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针3.HEAD如果指向master,那么现在就在master分支上4.HEAD如果执行hotfix,那么现在就在hotfix分支上5.所以切换分支的本质就是移动HEAD指针

6.3.4.分支合并

1.基本语法

git merge 分支名

6.3.5.代码合并冲突解决

1.合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改2.Git无法替我们决定使用哪一个,必须人为决定新代码内容3.如下:master分支和hot-fix分支同时修改了同一个文件的同一处代码4.查看状态(检测到有同一个文件的同一个位置有两处不同修改,产生冲突both modified)5.此时需要手动修改该冲突文件,然后提交到合并文件中

7.Git团队协作机制

1.团队内协作

2.跨团队协作

3.fork(叉子):把所有代码作为一个分支复制过来

8.Idea集成Git

9.GitGub

代码托管中心远程仓库操作git remote -v:查看当前所有远程地址别名git remote add 别名 远程地址:起别名git push 别名 分支:推送本地分支上的内容到远程仓库git clone 远程地址:将远程仓库的内容克隆到本地git pull 远程库地址别名 远程分支名:将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

1.创建远程仓库别名

git remote -v 查看当前所有远程地址别名git remote add 别名 远程地址

2.推送本地分支到远程仓库

git push 别名 分支

注意需要认证,sign in即可

3.拉取远程库到本地库

远程拉取的会自动同步到本地库,不需要再次提交到本地库

克隆远程库到本地库Clone

克隆代码是不需要登录账号的,因为创建时是公共的,读权限是公共的

clone会做如下操作1.拉取代码2.初始化本地仓库3.创建别名

默认别名是origin

注意需要删除凭据管理还需要对运行提交的人员进行授权

跨团队协作

SSH免密登录

进入该文件

公钥和私钥

Idea集成GitHub

GitLab(基于局域网的代码托管中心)

GitLab服务器的搭建和部署Idea集成GitLab

Gitee码云(国内版本的GitGub)

码云创建远程库Idea集成Gitee码云码云连接GitHub进行代码的复制和迁移

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。