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
| 对比项 | SVN | Git |
|---|---|---|
| 仓库模型 | 集中式 | 分布式 |
| 核心仓库 | 依赖中央仓库 | 每个本地仓库都较完整 |
| 本地仓库 | 主要是工作副本 | 有完整本地仓库 |
| 离线提交 | 不支持提交到版本库 | 支持本地 commit |
| 提交方式 | commit 直接到中央仓库 | commit 先到本地,push 再上传远程 |
| 获取更新 | update | pull / fetch |
| 首次获取 | checkout | clone |
| 网络依赖 | 较强 | 较低,本地操作很多可离线完成 |
| 分支创建 | 相对较重,本质上常基于目录复制 | 很轻量,创建/切换速度快 |
| 分支合并 | 相对繁琐 | 更适合频繁分支、合并 |
| 历史记录 | 主要依赖中央仓库 | 本地保留完整提交历史 |
| 查看历史 | 通常依赖服务器 | 本地即可查看 |
| 提交速度 | 受网络影响明显 | 本地 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 内核这种超大型项目