Day1|【Git】学习 Git 的第一步骤 - 什麽是 Git?

在学期间是否遇过作业前後修改出好多个版本,你会以什麽方式命名呢?以我的例子来说,大学作业就是与老师讨论後又被退回来修改,或是与组员之间共同编辑了同份档案,最後已经不清楚哪份才是最终版本,各版本之间的差异又是什麽?
https://ithelp.ithome.com.tw/upload/images/20210914/20141010kk4WWyLPmR.png

平常我的习惯是把日期放在头当档名,但找截图时实在太乱了QQ

这样的处理方式套用在工程师上,可能会出现以下缺点
1. 无法得知哪一份才最新档案
2. 共同编辑需加上编辑者名字,若同时进行编辑,可能会有覆盖的情形发生
3. 无法了解每个版本之间的差异,以及备份的原因
4. 无法追踪修改者和修改的内容

种种因素导致工程师合作上的混乱,因此需要程序码管理系统,而好的程序码管理系统会大幅影响到开发效率。
Git 的版本控制系统就是为了解决这样的问题而开发的。


什麽是 Git ?

💡 Git 是一种分散式版本的版本控制系统。

版本控制系统(Version Control Stystem)

记录一个或若干个文件的状态变化,并可以随时切换到某个「版本」时候的状态,以便查看特定版本修订情况的系统。

可以清楚地纪录每个档案的拥有者、时间、修改异动。

集中式与分散式

  • 集中式版控系统 (Centralize Version Control)

    如:CVS、SVN 和 Perforce

    需有一个专用的服务器来管理所有版本的档案,所有的更新都需透过此服务器沟通。

    https://ithelp.ithome.com.tw/upload/images/20210913/20141010mFEBZXKgzG.png

    特点:

    • 同步 - 让所有开发者间对档案所做的变更都能够同步,最终得到相同的档案内容。

    • 追溯 - 回到受控档案在变化历史中的任何一个版本,并且明白每个版本间变化的原因、以及究竟做了什麽变动。

    • 备份 - 让所有的受控档案集中保管於档案库中,做为备份也利於备份。

    优点:

    • 可以知道专案中的其他人正在做什麽。

    • 管理者可以掌控每个开发者的权限。

    • 比每个用户端只用本机的版本控制系统好管理很多。

    缺点:

    • 如果服务器发生故障、损坏,或是没有网路连线的环境,那麽就无法使用,更有可能遗失所有资料,影响开发效率。
  • 分散式版本控制系统(Distributed Version Control Systems,简称 DVCSs)

    如:Git、Mercurial、Bazaar 和 Darcs

    特点:

    • 每个开发者拥各自独立的变更集合,开发者之间可分享自己的变更集合。

    • 可在离线环境(深山、飞机)下正常使用。

    • 重视分支(branch)的支援

https://ithelp.ithome.com.tw/upload/images/20210913/20141010o3X9VU3NEC.png


Git 的优点

  1. 免费、开源
  2. 速度快、档案体积小
  3. 分散式系统
    • 可以在没有服务器或是没有网路的环境,依旧可以使用 Git 来进行版控,待服务器恢复正常运作或是再有网路的环境後再进行同步,不会受影响。
  4. 处理档案的方式
    • 其他版本控制:记录每个版本之间的「异动」,
    • Git :主要在於记录「档案内容」,并更新纪录整个目录与档案的树状结构。

Git 的缺点

  1. 易学难精、指令多
  2. 资安问题
    若是将重要的资料也要丢到GIT上面或是没有处理好了话,重要资料很有可能被骇客窃取。

Git 是一款版本控制软件,而 GitHub 是一个商业网站,GItHub 的本体是一个 Git 服务器。

了解 Git 的基本概念:

  1. 记录档案快照 Snapshot,而不是差异
    每当提交 commit(注:在 Git 储存目前专案的状态)时,Git 会纪录下所有目前档案的样子,并且参照到这次快照中。 为了讲求效率,只要档案没有变更,Git 不会再度储存该档案,而是直接将上一次相同的档案参照到这次快照中。 Git 把它的资料视为一连串的快照。

  2. 大部份的操作皆可在本地端完成

  3. Git 能检查完整性
    在 Git 中所有的物件在储存前都会被计算校验码(checksum)并以校验码参照物件。

  4. Git 通常只增加资料

  5. 三种状态

    1. 已提交(committed)
      • 己安全地存在你的本地端储存库
    2. 已修改(modified)
      • 已被修改但尚未提交到本地端储存库
    3. 已预存(staged)
      • 将会被存到下次你提交的快照中
  6. Git 专案的三个主要区域

    1. Git 资料夹

      • 储存你专案的後设资料及物件资料库的地方
    2. 工作目录(working directory)

      • 专案中的某一个版本
      • 从 Git 目录内被压缩过的资料库中拉出来并放在硬碟供使用或修改
    3. 暂存区(staging area)

      • 一个单一档案
      • 存放在 Git 目录下,储存关於下次提交的资讯。
      • 会称为索引「index」,但现在更常被称呼为暂存区。

      https://ithelp.ithome.com.tw/upload/images/20210913/20141010qQ3ygnYYeG.png

  7. 基本 Git 工作流程

    1. 首先在你工作目录修改档案或编辑动作。
    2. 预存档案,将档案的快照新增加至暂存区。
    3. 做提交的动作,这会让存在暂存区的档案快照永久地储存在 Git 目录中。

为期 30 天的铁人赛文章,主要都是纪录学习笔记,透过翻阅书籍、查找资料後整理,也许有些技术方面不够专业,但自学的过程挺有成就感的!?
以下都会是後续文章学习过程所参考的资料:


<<:  DAY1-为何要逼自己参加铁人赛

>>:  Day1 前言

[Day 27] 建立table连线控制

建好table後,再来就是要建立Controller建立路径来控制更新、删除、取得资料的动作。 在终...

Day24 - 权限控制

今天的实作内容主要根据教学网站进行。 在Day22时,我们实作了身份验证功能,部分功能要求使用者必须...

Day 15 -版本控制与git flow

前十四天我们快速看过了Vue的语法以及一些基本概念,今天我们要跳一下来看何谓版本控制与git flo...

[Day 29] - 手把手跨出第一步!– 烧录闪烁程序到Arduino Part.2

17King 制造中,订阅一下吧(*´∀`)~♥ 今日影片长度:08 分 36 秒 上集重点条列: ...

Day 11. Coding style

前面讲完了物件导向的3大特性,那再来讲讲新手要如何写出好Code 首先对於不同的工程师,我觉得好的程...