无论你是独立开发者还是团队成员,版本控制都是你必不可少的工具。本文带你从零理解版本控制,掌握 Git / GitLab 的部署与使用,构建你自己的代码管理平台。


一、版本控制概述

1.1 什么是版本控制?

版本控制是一种记录文件内容变化(尤其是源代码)的系统,便于日后查阅、恢复或合并历史版本。它解决了以下问题:

  • 多人协作时代码冲突

  • 代码回滚困难

  • 无法追踪修改责任

  • 代码备份与恢复复杂

1.2 版本控制的核心功能

功能 说明
历史记录 谁、何时、改了什么
并行开发 支持多分支独立开发
变更追踪 支持差异对比与合并
回滚能力 随时回到任意历史版本
权限控制 控制谁可以读/写/合并代码

二、版本控制的三种类型

2.1 本地版本控制(Local VCS)

  • 原理:本地数据库记录文件差异

  • 示例:RCS

  • ❌ 缺点:无法多人协作

2.2 集中式版本控制(CVCS)

  • 原理:中央服务器存储所有版本,客户端从服务器拉取

  • 示例:SVN、CVS、Perforce

  • ✅ 优点:权限统一、管理方便

  • ❌ 缺点:单点故障、服务器宕机无法提交

2.3 分布式版本控制(DVCS)

  • 原理:每个客户端都有完整的代码仓库镜像

  • 示例:Git、Mercurial

  • ✅ 优点:

    • 无单点故障

    • 支持离线提交

    • 分支管理灵活


三、常见版本控制系统对比

系统 类型 是否分布式 典型应用场景
Git DVCS 开源项目、企业开发
GitHub 托管平台 开源托管、协作
GitLab 自托管平台 企业内部代码管理
SVN CVCS 传统企业、简单项目
Mercurial DVCS 大型项目、性能要求高

四、Git 工作原理(重点)

4.1 Git 的三个核心区域

区域 说明
工作区 你正在编辑的文件目录
暂存区 git add 后的临时存储区域
本地仓库 git commit 后永久存储的版本库

4.2 Git 对象模型

  • Blob:文件内容

  • Tree:目录结构

  • Commit:快照 + 元信息(作者、时间、父提交)

4.3 核心操作流程

bash

git add .           # 工作区 → 暂存区
git commit -m "msg" # 暂存区 → 本地仓库
git push            # 本地 → 远程仓库
git pull            # 远程 → 工作区

4.4 补充知识点(原创扩展)

🔹 Git 的 SHA-1 校验和

每次提交都会生成一个 40 位的 SHA-1 哈希值,作为唯一标识。哪怕只改一个字符,哈希值也会完全不同。

🔹 Git 的三种合并策略
  • Fast-forward:直接移动指针

  • Recursive:多分支合并

  • Ours / Theirs:冲突时选择保留哪一方

🔹 Git 钩子(Hooks)

在特定动作(如 commit、push)前后自动执行脚本,可用于代码格式化、测试、邮件通知等。


五、Git 服务器部署(从零搭建)

5.1 环境准备(openEuler / CentOS)

主机名 IP 角色
git 192.168.207.137 服务端
client 192.168.207.138 客户端

5.2 基础环境配置

bash

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 时间同步
timedatectl set-timezone Asia/Shanghai
chronyc sources -v

# 修改主机名
hostnamectl set-hostname git

5.3 安装 Git

bash

dnf install -y git

5.4 初始化远程仓库(服务端)

bash

mkdir /opt/linuxprobe.git
cd /opt/linuxprobe.git
git --bare init

--bare 表示裸仓库,无工作目录,仅用于远程推送。

5.5 客户端配置与克隆

bash

# 安装 Git
dnf install -y git

# 生成 SSH 密钥
ssh-keygen
ssh-copy-id root@192.168.207.137

# 克隆仓库
git clone root@192.168.207.137:/opt/linuxprobe.git

5.6 客户端用户信息配置

bash

cd linuxprobe
git config --global user.name "Zhang San"
git config --global user.email "zhangsan@example.com"
git config --global core.editor vim

5.7 代码提交全流程

bash

echo "Hello World" > readme.txt
git add readme.txt
git commit -m "first commit"
git tag v1.1 -m "version 1.1"
git push origin master
git push origin v1.1

六、GitLab 部署(企业级 Web 管理)

6.1 安装 GitLab

bash

# 添加清华源
cat > /etc/yum.repos.d/gitlab-ce.repo <<EOF
[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el9
enabled=1
gpgcheck=0
EOF

# 安装
dnf install -y policycoreutils-python-utils gitlab-ce-17.8.2

6.2 配置与启动

bash

# 修改 external_url
vi /etc/gitlab/gitlab.rb
external_url 'http://192.168.207.137'

# 重新配置
gitlab-ctl reconfigure

6.3 登录与密码修改

  • 默认账号:root

  • 初始密码:cat /etc/gitlab/initial_root_password

  • 登录后修改密码(至少 8 位)

6.4 创建项目与克隆

bash

git clone http://192.168.207.137/root/kgc-demo.git
cd kgc-demo
echo "test web" > index.html
git add .
git commit -m "init"
git push origin main

6.5 用户与组管理(原创补充)

🔹 GitLab 权限层级
权限 能力简述
Guest 仅读写 issue,不能看代码
Reporter 可克隆代码,不能提交
Developer 可 push、创建分支
Maintainer 管理分支、成员、项目设置
Owner 删除项目、管理组
🔹 用户加入组流程
  1. 创建组(Group)

  2. 创建用户(User)

  3. 将用户加入组并分配角色

  4. 用户首次登录需重置密码


七、分支管理(重点)

7.1 分支的本质

  • 分支是指向某个提交对象的可变指针

  • HEAD 指向当前分支

  • 默认主分支为 master 或 main

7.2 常用分支命令

bash

# 查看分支
git branch

# 创建分支
git branch dev

# 切换分支
git checkout dev

# 创建并切换
git checkout -b dev

# 合并分支
git checkout main
git merge dev

# 删除本地分支
git branch -d dev

# 删除远程分支
git push origin --delete dev

7.3 分支合并冲突模拟与解决(原创补充)

bash

# 模拟冲突
git checkout -b feature
echo "feature" > README
git add .
git commit -m "feature change"

git checkout main
echo "main" > README
git add .
git commit -m "main change"

# 合并冲突
git merge feature

手动编辑 README,保留所需内容后:

bash

git add .
git commit -m "resolve conflict"

八、常用命令速查表(完整版)

命令 说明
git init 初始化本地仓库
git clone <url> 克隆远程仓库
git status 查看状态
git add <file> 添加到暂存区
git commit -m "msg" 提交到本地仓库
git push 推送到远程
git pull 拉取并合并
git fetch 只拉取不合并
git log 查看提交历史
git diff 查看差异
git tag 打标签
git branch 查看分支
git merge 合并分支
git checkout 切换分支/文件
git reset 回退版本
git revert 撤销提交
git stash 暂存未提交的修改
git remote -v 查看远程仓库

九、总结与建议

场景 推荐工具
个人学习、小项目 Git + GitHub
企业内部、私有代码 GitLab(自托管)
传统企业、不熟悉 Git SVN
大型开源项目 Git + Gerrit

✅ 无论你选择哪个工具,掌握 Git 是现代开发者的基本功


十、写在最后

版本控制不仅仅是代码的“存档工具”,它是团队协作的基石,是项目演进的地图。希望通过这篇“知识点大全”,你不仅能学会 Git 和 GitLab 的部署与使用,更能理解版本控制的哲学。

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、转发,也欢迎在评论区交流你的使用经验或踩坑记录!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐