网站公告

本次更新:没啥更新的

“钱塘江上潮信起,今日方知我是我”

Skip to content

1.版本控制概述 ​

字数: 0 字 时长: 0 分钟

Git 是一个开源的分布式版本控制系统,由 Linux 的创始人林纳斯·托瓦兹(Linus Torvalds)于 2005 年开发。它主要用于高效、高速地处理从小型到大型项目的代码版本管理。

以下是 Git 的核心概念和关键特点概览:

1.1核心特点 ​

  • 分布式管理:每位开发者的电脑上都有一个完整的代码库(包含所有历史记录)。即使没有网络,也完全不影响在本地查看历史、提交代码或切换分支。

  • 强大的分支功能:Git 的分支创建和切换极其快速。团队成员可以各自创建独立的分支来开发新功能或修复 Bug,互不干扰,完成后再合并。

  • 数据完整性:Git 使用 SHA-1 哈希算法来命名文件和记录历史,确保任何代码的改动都不会在 Git 不知情的情况下被篡改。

1.2 基本工作流程 ​

Git 核心包含三个工作区域:

  • 工作区 (Working Directory):你在电脑上实际看到并修改的代码文件。

  • 暂存区 (Staging Area / Index):一个准备好提交的临时保存区域,存放你用 git add 标记的改动。

  • 本地仓库 (Local Repository):通过 git commit 将暂存区的内容真正记录到本地的历史版本库中。

  • 远程仓库 (Remote Repository):托管在网络上的代码库(如 GitHub、GitLab),用于多人协同和共享。

版本控制解决什么问题 ​

  • 记录文件变化

    大白话:就像你写论文或做设计时,每完成一个阶段,就复制一份并重命名为“论文_初稿”、“论文_修改1”、“论文_最终版”。

    Git 怎么做:你不用手动复制一堆文件。Git 就像一个隐形的相机,你每按一次“快门”(执行 commit),它就把当前所有文件的状态拍张照片存起来。更厉害的是,它只保存变化的部分,不占电脑空间。

  • 回退历史版本

    大白话:代码写崩了,或者客户突然说“还是用第一版吧”。如果没有 Git,你可能得疯狂按 Ctrl + Z(还得祈祷软件没关闭),或者看着满屏幕的“最终版”、“最最终版”崩溃。

    Git 怎么做:因为你有之前拍的“照片”,你可以让 Git 一秒钟穿越回过去的任何一个存档点。之前的改动如果不要了,可以直接“撕掉”重来。

  • 对比不同版本差异

    大白话:过了两个礼拜,你看着自己写的代码,完全想不起来昨天和今天改了哪里,或者不知道别人动了你哪个文件。

    Git 怎么做:它能把两个版本的代码并排放在一起,用绿色高亮显示你新加了哪几行,用红色高亮显示你删了哪几行。一目了然,谁也别想赖账。

  • 支持多人协作

    大白话:现在的软件很稳定,你想开发一个“新功能”,但怕把现有的搞砸了。

    Git 怎么做:你可以一键开启一个“平行宇宙”(创建分支)。在平行宇宙里,你随便折腾、随便改,原本稳定的软件完全不受影响。等你把新功能彻底做好了、测试没问题了,再让这个平行宇宙“合体”(合并)回现实世界。

  • 支持分支开发与合并

    大白话:三个人要一起写同一个项目。如果用 U 盘拷来拷去,或者用微信发文件,最后拼凑在一起绝对是个灾难。

    Git 怎么做:大家把代码都传到一个云端(比如 GitHub)。你写你的,我写我的。每天下班前,大家把各自的代码“交作业”(Push)上去。Git 会聪明地把大家写的东西拼装在一起。如果两个人不小心改了同一行代码,Git 还会弹出来提示:“这里撞车了,你们商量一下留谁的”,这就是解决冲突。

2.集中式与分布式 ​

字数: 0 字 时长: 0 分钟

SVN ​

SVN 是集中式版本控制系统,项目的版本历史主要保存在中央服务器中,开发人员通过 checkout / update / commit 与中央仓库进行交互。

这种方式结构简单、权限集中,但对中央服务器依赖较强;如果服务器不可用,代码提交、更新等协作操作会受到影响。

Git ​

Git 是分布式版本控制系统,每个开发人员本地都有一个相对完整的仓库,可以保存代码、提交记录、分支和版本历史。

Git 的 commit 先提交到本地仓库,再通过 push 与远程仓库同步,因此即使暂时无法连接远程服务器,也可以继续进行大部分本地版本管理操作。

SVN vs Git ​

对比项SVNGit
仓库模型集中式分布式
核心仓库依赖中央仓库每个本地仓库都较完整
本地仓库主要是工作副本有完整本地仓库
离线提交不支持提交到版本库支持本地 commit
提交方式commit 直接到中央仓库commit 先到本地,push 再上传远程
获取更新updatepull / fetch
首次获取checkoutclone
网络依赖较强较低,本地操作很多可离线完成
分支创建相对较重,本质上常基于目录复制很轻量,创建/切换速度快
分支合并相对繁琐更适合频繁分支、合并
历史记录主要依赖中央仓库本地保留完整提交历史
查看历史通常依赖服务器本地即可查看
提交速度受网络影响明显本地 commit 很快
中央服务器故障会明显影响团队开发本地仍可提交、查看历史
权限控制目录级权限控制较直观通常以仓库/平台权限为主
大型二进制文件相对更友好默认不擅长,通常配合 Git LFS
协作方式围绕中央服务器协作本地开发 + 远程仓库协作
常见场景老牌企业项目、集中权限管理当前主流软件开发、开源、互联网项目

我其实并没有用过 SVN,我看到别人的博客有这个对比项,我就 copy 过来了。

Git 的诞生 ​

字数: 0 字 时长: 0 分钟

Git 最初由 Linus Torvalds 为 Linux 内核开发创建,目标是高性能、分布式、可靠地管理大规模代码协作。

· 1991 年:Linux 内核项目诞生 · 1991~2002 年:主要通过补丁(Patch)和文件归档管理代码 · 2002 年:Linux 内核开始使用分布式版本控制系统 BitKeeper · 2005 年:BitKeeper 停止向 Linux 社区免费授权 · 2005 年:Linus Torvalds 决定开发新的版本控制系统 · 2005 年:Git 正式诞生,并用于 Linux 内核开发

Git 最初的设计目标:

· 速度快 · 设计简单 · 支持大量并行分支 · 支持非线性开发 · 完全分布式 · 能够管理 Linux 内核这种超大型项目

Noctiflorous Garden · MIT License