Git 版本控制工具

Git 版本控制工具

学习目标

必备(项目开发中必定用到)

能够克隆服务器上的分支并会切换分支

拓展

本地git操作
远程仓库合并
学会看提示信息去掌握git的方法

文档

中文权威文档:
https://git-scm.com/book/zh/v2

如何在码云上生成并部署SSH key: http://git.mydoc.io/?t=154712

安装Git

需要了解几个问题

  • 为什么需要版本控制工具?
  • 了解版本控制工具的发展历程
  • 了解本地版本控制系统、集中化版本控制系统和分布式版本控制系统的异同
  • 为什么需要版本控制工具?

  • 备份文件(U盘)
  • 记录历史(历史书)
  • 回到过去(时光机)
  • 多端共享(百度云盘)
  • 团队协作(复仇者联盟)
  • 版本控制工具的发展历程

  • cvs(1985年) --- svn(2000年) --- git(2005)
  • Git诞生

  • 在2002年以前,世界各地的志愿者把源代码文件发给Linus,然后由Linus本人通过手工方式合并代码!因为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写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
  • Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
  • 历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
  • 集中式和分布式的区别

  • git-scm [官方说明]: `https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6`
    • 集中式:代码都保存在中央服务器,开发人员按需获取代码,修改完成后提交到中央服务器保存
      • 优势:
        • 方便权限和内容统一管理
        • 可以按需检出代码,节省客户端硬盘空间
      • 劣势:
        • 连接不上服务器时,无法获取和提交更新
    • 分布式:代码保存在每一个客户端中,开发人员在本地由完整的项目代码,修改完成后保存在本地仓库。在将来通过网络或其他方式,相互交换修改历史
      • 优势:
        • 分布式存储,不担心服务器故障导致的代码丢失
      • 劣势:操作灵活,有学习成本

    Git的优势

  • 分布式
  • 强大的分支(支持非线性的开发模式)
  • 灵活(甚至可以修改历史)
  • 常用的操作

    1. 创建仓库

      git init # 在当面目录下创建仓库
      
    2. 设置昵称和邮箱

      git config --global user.name "Gavin" # 设置昵称
      git config --global user.email "Gavin@email.com" # 设置邮箱
      

    注意git的设置分为“当前仓库设置"和"全局设置",上面加了–global是对全局生效的

    1. 创建或修改文件

      这个就略了吧。。

    2. 将文件加入版本控制

      git add xxx.md
      
    3. 提交此次修改

      git commit -m "增加了一个文件,并且修改了内容"  #引号内书写对文本操作的注释内容
      
    4. 查看修改历史

      git log
      
    5. 创建新分支,进行实验性的操作

      git checkout -b new_branch
      
    6. 合并分支

      git checkout master # 切换到接收合并的分支
      git merge new_branch  # 接收new_branch 分支的合并
      
    7. 删除分支

      git branch -d new_branch
      
    8. 切换版本

      git reset --hard 1j284jf  # 切换到指定了历史中
      

    注意!以上命令都是你的本地仓库进行的!!!

    注意!以上命令掌握之后,日常使用GUI完成操作!

    > 为什么?
    

    如何和他人交换代码(其实就是交换History)

    • git托管平台

      • github # 全球最大的同性交友网站
      • gitlab # 开源的高度定制化的托管平台
      • gogs# 国人使用go开发的开源精简平台
      • bitbucket # 国外的免费私有库平台
      • gitee # 国内的免费私有库平台
    • 注册
      https://gitee.com/signup

    • 创建远程仓库
      https://gitee.com/projects/new

    • 获取仓库地址

    • 推送
      push

      思考,既然是分布式的,那么现在远程仓库和本地仓库的内容是一摸一样吗
      对于已经push 的分支来说是的。但是对于没有push的分支,远程仓库是没有的

    • fork

      • 派生一个远程仓库(注意远程仓库,是指托管平台中的仓库,本地仓库是指你电脑中的仓库)
    • Pull Request

      • 远程仓库建的合并(请求目标仓库合并自己的仓库)
      • 前提:有fork关系
      • 本质将一个仓库的某分支合并到另一个的仓库的某分支

      说明,获取代码是整个仓库,交换代码(更新)是以分支为单位的
      所以,新功能一般在新分支开发,然后把整个分支合并到主分支上

    Git工作流程

    1. 获取代码

      1. 如果没有克隆仓库,先克隆仓库
        git clone git@gitee.com:DN_Ian/Vip1710.git
      2. 获取最新数据,使本地仓库与远程仓库一致
        git fetch # 注意pull命令fetch命令的区别,fetch/pull,抓取/拉取, **pull == fetch + merge **
    2. 开发代码

      1. 切换到要开发的分支 (假设要对gavin分支进行开发)
        git checkout origin/gavin

      2. 新建私有分支,进行开发
        git checkout -b my_branch

      3. 开发代码
        (略)

      4. 提交
        git commit -a(在私有分支my_branch上)

    3. 上传代码

      1. 保存好正在开发的代码

      2. 获取最新数据,使本地仓库与远程仓库一致
        git fetch origin

      3. 切换到要开发的分支 (假设要对gavin分支进行开发)
        git checkout origin/gavin
        // 切到一个临时分支,没有名字, 版本与远程gavin分支相同

      4. 将开发完成的私有分支合并, 如果有冲突,使用gui处理冲突
        git merge my_branch

      5. 上传修改后的gavin分支到远程仓库

        git push origin my_branch:gavin #1,推送到属于自己的派生仓库,2.推送到目标分支

        • 如果恰好此时远程仓库的gavin分支发生变化,会提示冲突。则重新操作

    注意区别

    本地和本地—— checkout/merge
    本地和远程—— clone/pull/fetch/push
    远程和远程—— fork/pull reuqets

    服务器本地远程
    本地checkout/mergeclone/fetch/push
    远程clone/fetch/pushfork/pull reuqets
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值