Git的正确使用姿势 | 青训营笔记

80 阅读5分钟

笔记1.webp

为什么要学习Git

  • 协同工作

    业界绝大多数公司都是基于 Git 进行代码管理,因此 Git 是一个程序员的必备技能

  • 开源社区

    目前绝大多数的开源项目都是基于 Git 维护的,参与这些项目的开发都需要使用 Git

Git 是什么

版本控制

Git是什么

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

版本控制是什么

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。 一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

为什么需要版本控制

更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生;也能随时切换到不同的版本,回滚误删误改的问题代码。

版本控制

  1. 本地版本控制

    代表工具:RCS

    解决的问题:本地代码的版本控制

    基本原理:本地保存所有变更的补丁集,可以理解成就是所有的Diff,通过这些补丁,我们可以计算出每个版本的的实际文件内容

    缺点:RCS 这种本地版本控制存在最致命的缺陷就是只能在本地使用,无法进行团队协作,因此使用的场景非常有限因此衍生出了集中式版本控制

  2. 集中式版本控制

    代表工具:SVN

    解决的问题:提供一个远程服务器来维护代码版本,本地不保存代码版本,解决多人协作问题

    基本原理:

    • 提供一个远端服务来保存文件,所有用户的提交都提交到该服务器中
    • 增量保存每次提交的 Diff,如果提交的增量中和远端现存的文件存在冲突,则西药本地提前解决冲突

    优点:

    • 学习简单,更容易操作
    • 支持二进制文件,对大文件支持更友好

    缺点:

    • 本地不存储版本管理的概念,所有提交都只能联上服务器才可以提交
    • 分支上的支持不够好,对于大型项目团队合作比较困难用户本地不保存所有版本的代码,如果服务器故障容易导致历史版本的丢失
  3. 分布式版本控制

    代表工具:Git

    解决的问题:每个仓库都能记录版本历史,解决只有一个服务器保存版本的问题

    基本原理:

    • 每个库都存有完整的提交历史,可以直接在本地进行代码提交
    • 每次提交记录的都是完整的文件快照,而不是记录增量
    • 通过 Push 等操作来完成和远端代码的同步

    优点:

    • 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
    • 分支管理功能强大,方便团队合作,多人协同开发
    • 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失

    缺点:

    • 相对SVN更复杂,学习成本更高
    • 对于大文件的支持不是特别好(git-lfs工具可以弥补这个功能)

Git的基本使用方式

Git基本命令

  1. 配置
  • git config
  • git remote
  1. 提交代码
  • git add
  • git commit
  1. 远端同步
  • 拉取代码
    • clone
    • pull
    • fetch
  • 推送代码
    • push

Git项目目录

项目初始化
  • mkdir study
  • cd study
  • git init
其他参数
  • --initial-branch 初始化的分支
  • --bare 创建一个裸仓库(纯Git目录,没有工作目录)
  • --template 可以通过模板来创建预先构建好的自定义git目录

常见Git配置

  • 用户名配置

       - git config --global user.name "young0802"
       - git config --global user.email 2992395331@qq.com
    
  • Instead of 配置

        - git congig --global url.git@github.com:.insteadOf http://github.com/
    
  • Git命令别名配置

      - git congig --global alias.cin "commit --amend --no-edit"
    

Git Remote

同一个 Origin 设置不同的 Push 和 Fetch URL

Git Clone & Pull & Fetch

  • Clone

    拉取完整的仓库到本地目录,可以指定分支,深度

  • Fetch

    将远端某些分支最新代码拉取到本地,不会执行merge操作,会修改 refs/remote 内的分支信息 ,如果需要和本地代码合并需要手动操作

  • Pull

    拉取远端某分支,并和本地代码进行合并,操作等同于 git fetch + git merge,也可以通过 git pull --rebase 完成 git fetch + git rebase 操作。 可能会存在冲突,需要解决冲突

Git Push

  • 常用命令

    一般使用 git push origin master 命令即可完成

  • 冲突问题

    1. 如果本地的 commit 记录和远端 commit 历史版本不一致,则会产生冲突,比如 git commit --amend or git rebase 都有可能导致这个问题
    2. 如果该分支就自己一个人使用,或者团队内确认过可以修改历史,则可以通过 git push origin master -f 来完成强制推送,一般不推荐主干分支进行该操作,正常都应该解决冲突后再进行推送
  • 推送规则限制

    可以通过保护分支,来配置一些保护规则,防止误操作,或者一些不合规的操作出现,导致代码丢失