版本控制工具Git、SVN

目录儿

  • 一、集中式版本控制工具SVN
  • 二、分布式版本控制工具Git
    • 2.1 工作原理
    • 2.2 安装
    • 2.3 基本配置
      • 2.3.2为常用指令配置别名
    • 2.4 获取本地仓库
    • 2.5 基础操作指令
      • 2.5.1 add、commit、status
      • 2.5.2 log查看提交日志
      • 2.5.3 版本回退
        • 拓展:reflog 回退日志
      • 2.5.4 忽略文件
    • 2.6 分支
      • 2.6.1 分支操作
      • 2.6.2 分支使用原则
  • 三、Git远程仓库
    • 3.1 创建远程仓库
    • 3.2 配置SSH公钥
    • 3.3 推送
    • 3.4 从远程仓库克隆
    • 3.5 从远程仓库中抓取和拉取
      • 3.5.1 抓取fetch
      • 3.5.1 拉取pull
      • 3.5.2 解决合并冲突
  • 四、git 在 idea 中的使用
    • 4.1 配置git安装位置
    • 4.2 初始化git仓库
    • 4.3 添加、提交
    • 4.4 git log提交日志
    • 4.5 推送
    • 4.6 从远程仓库克隆
    • 4.7 解决代码冲突
    • 4.8 创建分支
    • 4.9 分支合并

一、集中式版本控制工具SVN

集中式版本控制工具,版本库是集中存放在中央服务器的,团队里每个人工作时从中央服务器下载代码(必须联网才能工作,局域网或互联网)。个人修改完后然后提交到中央版本库。
版本控制工具Git、SVN_第1张图片

  • 缺点:版本库集中在一个服务器,发生宕机或磁盘损坏,会造成版本丢失等问题,容灾性差

二、分布式版本控制工具Git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。GitLinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。大神就是大神。

2.1 工作原理

Git是分布式的,并不需要有中心服务器,因为我们每台电脑拥有的东西都是一样的。Git之所以有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC是一样的。我们可以把它当做一个开发者的PC,是 为了大家代码容易交流不关机用的。没有它大家一样可以工作,只不过“交换”修改不方便而已。
版本控制工具Git、SVN_第2张图片
Git工作流程图:
版本控制工具Git、SVN_第3张图片

2.2 安装

安装完成后(windows),在任一目录下鼠标右键会多出如下选项:
版本控制工具Git、SVN_第4张图片

2.3 基本配置

在安装完成后首先要做的事情就是设置用户名称email地址,Git提交需要使用这些信息。

  1. 打开Git Bash
  2. 设置用户信息
    git config--global user.name "username"
    git config--global user.email "[email protected]"
    
    查看用户信息
    git config--global user.name
    git config--global user.email
    

2.3.2为常用指令配置别名

有些常用指令参数非常多,每次都要输入很多参数,可以使用别名简化操作:
① 打开用户目录(C盘下的用户目录如C:\Users\lisa),创建.bashrc文件

touch .bashrc

② 在.bashrc文件中输入别名配置内容,例如:

#用于输出g1t提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
a1ias ll='ls-al"

③ 使用这个配置文件
打开GitBash(随便哪个目录),执行命令

source C:/Users/lisa/.bashrc

④ 解决GitBash乱码问题(其中一种方案)
打开GitBash执行命令:

git config --global core.quotepath false

然后在${git home}/etc/bash.bashrc文件最后加入下面两行

export LANG=zh_CN.UTF-8"
export LC_ALL=zh_CN.UTF-8"

2.4 获取本地仓库

要使用Git对代码/目录进行版本控制,首先需要创建本地仓库:

  1. 在电脑的任意位置创建一个空目录(例如test)或者使用已目录作为我们的本地Git仓库
  2. 进入这个目录中,点击右键打开GitBash窗口
  3. 执行命令git init,把当前目录初始化为一个git仓库
  4. 创建成功后可在文件夹下看到一个隐藏的.git目录
    版本控制工具Git、SVN_第5张图片

2.5 基础操作指令

2.5.1 add、commit、status

Git工作目录下对于文件的增删改会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
版本控制工具Git、SVN_第6张图片

  1. git add 工作区 → 暂存区
    git add 文件名
    
    通常用git add .一次性把所有文件加入缓存区(.是通配符,表示当前目录所有文件)
  2. git commit 暂存区 → 本地仓库
    git commit -m "备注信息"
    
  3. git status 查看状态

2.5.2 log查看提交日志

命令格式:git log [option]

option:
–all 显示所有分支
–pretty=oneline 将提交信息显示为一行
–abbrev-commint 使输出的commitid更简短
–graph 以图形形式显示

2.5.3 版本回退

命令形式:

gir reset --hard 提交版本

版本控制工具Git、SVN_第7张图片
当回退完成后,HEAD指针(版本指针)就指向了回退版本。
注意,这个时候再用git log指令查看日志他就只显示到你回退的版本:
在这里插入图片描述
例:
回退到上一个版本[当前版本(已经提交)的上一个版本],删除工作区和缓存区的修改

git reset --hard HEAD^

回退到当前版本(没提交前的版本) , 删除工作区和缓存区的修改

git reset --hard HEAD

拓展:reflog 回退日志

如果你又想回退到之前哪个版本,只要你记得版本号,是可以的:
版本控制工具Git、SVN_第8张图片
如果刚好你忘了那个版本号,还可以通过查看回退日志找回来:
回退日志指令:git reflog
版本控制工具Git、SVN_第9张图片

2.5.4 忽略文件

一般我们总会有些文件无需纳入Gt的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore的文件(文件名称固定),列出要忽略的文件名或文件类型。

  1. 创建记录文件
touch .gitignore
  1. 在记录文件里列出想要忽略的文件
    可以是文件名,也可以是通配符
    版本控制工具Git、SVN_第10张图片
    其他的一些例子:
# 忽略.a结尾的文件
*.a
# lib.a 这个文件例外
!lib.a
# 忽略当前目录下的TODO文件,不包括 子目录下的TODO文件
/TODO
# 忽略 build 目录下的所有文件
build/
# 忽略 doc 目录下 .txt 后缀的文件,但不包括 doc/server目录下的 .txt 后缀的文件
doc/*.txt
# 忽略 doc 目录下所有.pdf后缀的文件
doc/**/*.pdf I

2.6 分支

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

2.6.1 分支操作

  1. 查看分支列表

    git branch
    
  2. 创建分支

    git branch 分支名
    
  3. 切换分支

    git checkout 分支名
    
  4. 创建并切换分支

    git checkout -b 新分支名
    
  5. 合并分支

    git merge 分支名
    

    例如把dev01分支合并到master分支,首先切换到主分支

    git checkout master
    

    然后执行合并指令,把dev01分支合并到当前分支(master

    git merge dev01
    
    1. 在命令行操作合并会出现vi编辑器,Esc + : + wq 保存就行。
    2. 一般都是把其他分支合并到主分支。
  6. 删除分支
    删除分支,需要做各种检查

    git branch -d 分支名
    

    不做任何检查,强制删除分支

    git branch -D 分支名
    
    1. 不能删除当前分支,只能删除其他分支
    2. 基于master分支创建一个dev分支,在dev没有合并到master分支的前提下,用git branch -d dev去删除dev分支,git会认为你是误操作,提示错误。这个时候就需要用-D来强制删除。
  7. 解决冲突
    如果master分支和dev分支都修改了同一个文件的同一行,要把dev分支合并到master分支的时候,就会发生冲突:
    在这里插入图片描述
    这个时候如果打开冲突文件,就会发现里面的内容变了,git把两个分支的冲突内容都写到了冲突文件上让你做取舍:
    版本控制工具Git、SVN_第11张图片
    然后根据需要手动修改,去掉git自动给你添加的那些指示符,保留或改成你想要的,如:
    在这里插入图片描述
    保存,然后再次addcommitmerge即可。

    <<<<<<<========之间的内容属于当前分支
    ========>>>>>>>>dev之间的内容属于dev分支

2.6.2 分支使用原则

  • master 分支:一般作为主分支、线上分支。中小规模项目作为线上运行的应用对应的分支。
  • develop 分支:是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
  • feature/xxx分支:从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
  • hotfix/xxxx分支:从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到mastertestdevelop分支。
  • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。

三、Git远程仓库

常见远程仓库:

  • Github:国外的公开的代码托管平台。
  • Gitee:国内的公开的代码托管平台。
  • Gitlab:基于git的开源项目,用于搭建私服。

企业常用Gitlab,因为GithubGitee平台都部署在别人的服务器中,而Gitlab是一个开源项目,可以在自己的服务器中搭建git私服,保证安全。

3.1 创建远程仓库

Gitee中创建一个远程仓库,过程省略。

3.2 配置SSH公钥

  1. 在本地GitBash中生成SSH公钥

    ssh-keygen -t rsa
    

    一路回车自动生成,如果公钥已经存在则自动覆盖,如下
    版本控制工具Git、SVN_第12张图片

  2. 获取生成的公钥(也是在GitBash中操作)

    cat ~/.ssh/id_rsa.pub
    

    如下:
    版本控制工具Git、SVN_第13张图片

  3. Gitee上配置公钥
    版本控制工具Git、SVN_第14张图片
    版本控制工具Git、SVN_第15张图片
    版本控制工具Git、SVN_第16张图片

  4. 回到本地验证配置是否成功

    ssh -T [email protected]
    

版本控制工具Git、SVN_第17张图片

3.3 推送

  1. 复制仓库地址,这里用的ssh的地址
    版本控制工具Git、SVN_第18张图片
  2. 本地关联远程仓库
    git remote add origin 远程仓库地址
    

    仓库名默认是origin,也可以自定义。

  3. 查看远程仓库列表,看看是否关联成功
    git remote
    
  4. 推送仓库
    git push origin master
    
    1. 完整命令是:
      git push [-f] [--set-upstream] [远端名称] [本地分支名][:远端分支名]
      
      • -f: 表示强制覆盖远程分支的代码,一般危险
      • –set-upstream: 推送的同时建立本地分支与远端分支的关联关系,建立了关联在下次推送时就不用写本地分支名和远端分支名,直接git push,一般不用。可以通过git branch -vv命令可以查看分支的关联关系。
      • 当远端分支名和本地分支名相同时可以忽略远端分支名
    2. push origin master表示把master分支推送到远程的origin仓库

3.4 从远程仓库克隆

把远程仓库克隆到本地。

git clone <仓库路径> [本地目录]

本地目录可以省略,会自动根据仓库名生成一个同名目录

3.5 从远程仓库中抓取和拉取

远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

3.5.1 抓取fetch

抓取指令就是将远程仓库里指定分支的更新都抓取到本地,但不会自动进行合并。

git fetch [remote name][branch name]

如果不指定远端名称和分支名,则抓取所有分支。

3.5.1 拉取pull

拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge

git pull [remote name][branch name]
  1. 如果不指定远端名称和分支名,则抓取所有并更新当前分支。

3.5.2 解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支,如下图所示。
版本控制工具Git、SVN_第19张图片

养成习惯,在push推送之前先pull一下

四、git 在 idea 中的使用

4.1 配置git安装位置

版本控制工具Git、SVN_第20张图片

4.2 初始化git仓库

打开一个项目
版本控制工具Git、SVN_第21张图片
版本控制工具Git、SVN_第22张图片

4.3 添加、提交

版本控制工具Git、SVN_第23张图片

提交过程可能会因为idea的代码检查比较慢,确认提交等待完成即可。

4.4 git log提交日志

版本控制工具Git、SVN_第24张图片

4.5 推送

版本控制工具Git、SVN_第25张图片
首次推送还没配置远程仓库地址会让你配置
版本控制工具Git、SVN_第26张图片
配置完就可以推送了
版本控制工具Git、SVN_第27张图片

4.6 从远程仓库克隆

如果本地没有项目代码,需要从远程仓库克隆
版本控制工具Git、SVN_第28张图片
然后配置仓库地址和本地仓库目录
版本控制工具Git、SVN_第29张图片
idea就自动把仓库克隆下来并打开。

4.7 解决代码冲突

记得每次推送代码前pull一下,默认选项就行。
版本控制工具Git、SVN_第30张图片
如果代码有冲突,那么会弹出提示,提示那个文件冲突了
版本控制工具Git、SVN_第31张图片
此时可以选择点击Merge选项,他会自动打开冲突文件让你修改。或者关掉这个提示窗口,在旁边的项目目录中冲突文件会变成红色,直接打开修改也行。
版本控制工具Git、SVN_第32张图片
修改完这个文件还是红色的,说明idea把冲突文件移出了工作区,这时直接提交会提示错误,先手动add一下这个文件再提交。
版本控制工具Git、SVN_第33张图片
之后就是正常提交推送即可。

4.8 创建分支

方式一版本控制工具Git、SVN_第34张图片
方式二
版本控制工具Git、SVN_第35张图片

推荐使用方式二,以为可以很直观的选择基于哪个提交版本创建分支
巧用git log 窗口很有用

4.9 分支合并

在分支栏直接操作,省略…

参考资料:哔哩哔哩-黑马程序员-黑马程序员Git全套教程,完整的git项目管理工具教程,一套精通git
https://www.bilibili.com/video/BV1MU4y1Y7h5?p=2&share_source=copy_web

你可能感兴趣的:(使用工具,git,github,gitee,版本控制,svn)