1、版本控制工具

1.1 集中式版本控制工具

CVS、SVN、VSS……

集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新

  • 优点

    1. 管理方便,逻辑明确,符合一般人思维习惯
    2. 易于管理,集中式服务器更能保证安全性
    3. 代码一致性非常高
    4. 代码一致性非常高
  • 缺点

    1. 服务器压力太大,数据库容量暴增

    2. 如果不能连接到服务器上,基本上不可以工作(如果服务器不能连接上,就不能提交、还原、对比等等)

    3. 不适合开源开发(开发人数非常非常多,但是 Google app engine 就是用 svn 的)。

      但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题

1.2 分布式版本控制工具

Git、Mercurial、Bazaar、Darcs……

像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份

  • 优点

    1. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
    2. 公共服务器压力和数据量都不会太大,任意两个开发者之间可以很容易的解决冲突
    3. 速度快、灵活。
    4. 离线工作, 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  • 缺点

    1. 学习周期相对而言比较长,不符合常规思维
    2. 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息

2、Git

2.1 Git 工作原理

image-20220725140322436

2.2 Git 常用命令

QQ图片20220725145008

有时候拉取代码失败:error: RPC failed; curl 18 transfer closed with outstanding read data remaining 的解决方法:

  1. 加大缓存区git config --global 克隆地址 524288000
  2. 减少克隆深度git clone 克隆地址 --depth 1
  3. http 方式换成 SSH 的方式

2.3 分支图解

  1. 主干分支 master

    主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。严禁从 develop 分支或 feature 分支直接合并到 master 分支

  2. 开发分支 develop

    主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

  3. bug 修理分支 hotfix

    主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。

  4. 准生产分支(预发布分支)release

    较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可视情况删除。

  5. 功能分支 feature

    为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后合并到开发分支。

image-20220802010746416

3、Git 与 GitHub

一句话来说,Git 是一个版本管理工具,GitHub 是基于 Git 的一个仓库托管平台(当然 GitHub 现在也远不止于此)

3.1 SSH 免密登录

首先注册 GitHub 账号,由于本地 Git 仓库和 GitHub 仓库之间的传输方式是通过 SSH 加密的,所以需要一些设置:

  1. 创建 SSH key。在用户主目录下 C:\Users\60279\ 查看有没有 .ssh 目录,如果有再看看这个目录下是否存在 id_rsaid_rsa.pub 这两个文件,如果没有,打开命令行输入如下命令:ssh-keygen -t rsa –C "你的 GitHub 注册邮箱"

    image-20220725165213792

  2. 按如下步骤找到相应的位置添加信息

    image-20220725190509648

  3. id_rsa.pub 中的文件内容,复制到 key 中,标题自定义即可

    image-20220725190726968

  4. 显示如下页面,即为成功

    image-20220725201504538

3.2 创建仓库

  1. 首先创建一个新的仓库,填入仓库名

    image-20220725202803919

  2. 目前 GitHub 上的这个仓库还是空的,可以从这个仓库克隆出新仓库,也可以把一个已有的仓库与之关联

    image-20220725204742251

3.3 IDEA 集成 GitHub

3.3.1 配置 Git 忽略文件

与项目的实际功能无关,且不参与服务器上部署运行。把他们忽略能够屏蔽 IDE 工具之间的差异

  1. 创建忽略规则文件 xxx.ignore(建议是 git.ignore)

  2. 便于管理建议放在家目录 C:\Users\60279

  3. git.ignore 文件模板:

    # Compiled class file
    *.class
    
    # Log file
    *.log
    
    # BlueJ files
    *.ctxt
    
    # Mobile Tools for Java (J2ME)
    .mtj.tmp/
    
    # Package Files #
    *.jar
    *.war
    *.nar
    *.ear
    *.zip
    *.tar.gz
    *.rar
    
    # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
    hs_err_pid*
    replay_pid*
    
    .classpath
    .project
    .settings
    .idea
    *.iml
    target
    out
  4. .gitconfig 文件中引用忽略配置文件

    [user]
     name = PendulumYe
     email = 602795356@qq.com
    [core]
     excludesfile = C:/Users/60279/git.ignore

3.3.2 定位 Git 程序

image-20220417235350218

3.3.3 设置 GitHub 账号

可以添加多个账号,如果连接不上可以使用先去 GitHub 上设置好 token 然后使用 token 的方法时登录

image-20220725211046038

3.3.4 分享工程至 GitHub

对于本地初始时不是 GitHub 的项目可以通过如下操作,在 GitHub 上创建一个远程仓库

image-20220726133328777

3.3.5 推送本地库到远程库

  1. 可以通过右上方的快捷方式

    image-20220726134028384

  2. 也可以通过左侧边栏

    image-20220726134144205

  3. 也可以通过鼠标右键的方式

    image-20220726165823400

注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高

因此,要先 pull 拉取一下远程库的代码,再修改、提交、推送

3.3.6 切换版本

image-20220418130459302

3.3.7 创建分支

image-20220418132538019

3.3.8 合并分支

  1. 如果代码没有冲突,分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交至本地库

    image-20220418144123955

  2. 如果 master 分支和 hot-fix 分支都修改了代码,在合并分支的时候就会发生冲突

    手动合并玩代码以后,点击右下角的Apply按钮,代码冲突解决,自动提交至本地库

    image-20220418145016167

3.3.9 拉取代码从远程库到本地库

pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

image-20220726171818047

3.3.10 克隆远程库到本地

通过 IDEA 集成 Git 拉取代码的时候,默认拉取的是 master 分支

image-20220418191917907

3.4 Git、GitHub、Gitee、GitLab 四者关系

  • Git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面
  • GitLab 是一个基于 Git 实现的在线代码仓库软件,提供 Web 可视化管理界面,通常用于企业团队内部协作开发
  • Gitee 可以简单的认为就是国内中文版的 GitHub
  • GitHub 是一个基于 Git 实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择 GitHub 作为代码托管仓库

4、SVN

4.1 基本概念

  • Repository(源代码库):源代码统一存放的地方
  • Checkout(提取):当你手上没有源代码的时候,你需要从 Repository 中 Checkout 一份
  • Commit(提交):当你已经修改了代码,你就需要 Commit 到 Repository
  • Update (更新):当你已经 Checkout 了一份源代码, Update 后就可以和 Repository 上的源代码同步

4.2 SVN 工作原理

image-20220727153816706

4.3 SVN 详细使用操作

由于目前 SVN 整体使用可能较少一些,因此具体操作可以查看该博文内容,很详细


END

本文作者:
文章标题:Git 与 SVN
本文地址:https://www.pendulumye.com/tool/460.html
版权说明:若无注明,本文皆PendulumYe原创,转载请保留文章出处。
最后修改:2022 年 08 月 02 日
千山万水总是情,给个一毛行不行💋