1. 没有版本控制的问题:仅仅复制文件为何是个坏主意
让我们从一个贴近生活的场景开始。想象你正在开发自己的 Java 项目。一切顺利,直到需要“做实验”的时刻。你决定改点东西,但又担心弄坏稳定版本。怎么办?当然是复制项目!
最终,你的磁盘上会出现这样的“杰作”:
MyProject/
├── Main.java
├── Main_backup.java
├── Main_final.java
├── Main_final2.java
├── Main_really_final.java
├── Main_really_really_final.java
是不是很熟悉?现在再想象一下,你的同事也加入了项目。他也喜欢复制文件——而且有自己的一套。如何判断哪一个是最新且可用的版本?如何知道是谁改了什么?如果实验失败,又该如何恢复一切?
没有版本控制:
- 很容易丢失或混淆可工作的代码。
- 无法“回滚”到旧版本。
- 两三个人协作会非常困难。
- 混乱不堪,害怕尝试新想法。
这些问题正是版本控制系统——例如 Git——要解决的。
2. 开发者为什么需要 Git?
Git 是一套强大的版本控制系统,用于在软件开发过程中跟踪源代码的更改。它允许开发者保存文件的不同版本,并协调多人在同一项目上的协作。
Git 的基本概念:
仓库
仓库(或“repo”)是保存整个项目历史的地方,包括所有更改和文件版本。
提交
commit 是项目的一个已保存状态。Git 中的每个提交都包含对项目做了哪些更改、由谁在何时完成等信息。提交构成了项目历史,你可以回到任意先前版本。
gitGraph
commit id: "1"
commit id: "2"
commit id: "3"
commit id: "4"
commit id: "5"
commit id: "6"
每个提交都是项目的一个“快照”,按顺序衔接前一个提交,形成连续的更改历史。
分支
branch 是一条独立的开发线路。默认情况下,Git 会创建 main 分支。你可以为新功能或修复创建新分支,然后将其合并回主分支。
gitGraph
commit id: "1"
commit id: "2"
branch develop
commit id: "3"
commit id: "4"
commit id: "5"
checkout main
commit id: "6"
commit id: "7"
merge develop
commit id: "8"
commit id: "9"
从主分支 main“分出”develop 分支以并行开发。完成后,将 develop 的更改合并回 main。
3. Git 基本命令(幕后发生的事)
下面是通过终端使用 Git 的基础命令列表。理解这些命令是所有操作的基础。不过我们将坚持使用GUI 方法,学习如何通过 IntelliJ IDEA 的图形界面完成这些操作。把这些命令当作系统“底层”发生的事情。
| 命令 | 说明 |
|---|---|
git init |
在当前目录初始化一个新的 Git 仓库。 |
git clone |
从指定 URL 克隆仓库到新目录。 |
git add |
将文件添加到暂存区,准备下次提交。 |
git commit |
将已暂存的更改提交到仓库。 |
git push |
将本地仓库的更改推送到远程仓库。 |
git pull |
将远程仓库的最新版本更新到当前分支。 |
git branch |
显示、创建或删除分支。 |
git merge |
将指定分支的更改合并到当前分支。 |
这些命令构成了在 Git 中工作的基本工具,帮助你管理代码更改、分支与合并,适用于各种规模的项目。
sequenceDiagram
participant 工作目录
participant 暂存区 (Staging)
participant 本地仓库
participant 远程仓库
工作目录 ->> 暂存区 (Staging): git add(添加到暂存区)
暂存区 (Staging) ->> 本地仓库: git commit(本地保存)
本地仓库 ->> 远程仓库: git push(推送到服务器)
远程仓库 ->> 工作目录: git pull(拉取更新)
4. 代码存放的三个位置
当你使用版本控制系统管理代码时,粗略来说,代码会存放在三个地方:
1. 远程仓库
这是集中存放代码的位置,通常托管在 GitHub、GitLab 或 Bitbucket 等服务上。它们提供集中式的代码存储,是协作的基础。远程仓库也是自动化流程(如构建、测试和应用部署)的集成点。
2. 本地仓库
本地仓库是你在自己电脑上的个人副本。在本地仓库中,你可以在没有网络连接的情况下执行所有 Git 操作(提交、分支、合并等)。
3. 工作目录
工作目录包含你当前正在处理的项目文件。你可以在此查看与修改文件,添加新功能或修复缺陷。
这三者共同构成了强大的源码管理基础设施,使开发者能够管理项目历史并高效协作。
5. GitHub —— 你的作品集
GitHub 是领先的代码托管平台,使用 Git 版本控制系统。自 2008 年成立以来,它迅速成为全球开发者的关键工具之一。
GitHub 允许用户创建仓库以管理项目、控制并跟踪代码更改,并与其他开发者协作。对于现代开发者来说,GitHub 个人主页是作品集的重要组成部分,可展示给潜在雇主。
6. 在 GitHub 上创建你的第一个仓库
步骤 1. 访问 https://github.com 并注册。
步骤 2. 点击 New repository 按钮以创建新仓库。
步骤 3. 配置仓库参数:
- 仓库名称:取一个有意义的名字。
- 公开还是私有:对于学习项目,建议选择“Public”,便于他人查看。
- Add a README file:务必勾选此项。README 是你项目的“门面”。
- Add .gitignore:点击下拉列表,选择与你的语言匹配的模板。
- Choose a license:可以跳过。
- 点击
Create repository。
步骤 4. 恭喜,你的第一个远程仓库已创建!
7. 安装与配置 Git
尽管可以通过命令行学习 Git 的基础(视频中已展示),但在日常工作中,99% 的开发者都会使用集成在 IDE 中的便捷工具。我们的目标是教会你用专业人士的方式工作。
JetBrains 家族的现代 IDE 都提供几乎相同的 Git 界面——无论是用于 Java/Kotlin 的 IntelliJ IDEA、用于 C# 的 Rider,还是用于 Python 的 PyCharm。这意味着,一旦你在某个环境中学会了 Git,就能轻松迁移到其他环境。因此,我们将以 IntelliJ IDEA 作为通用示例。你在这里看到的一切,在你喜欢的 IDE 中看起来和工作方式都完全一致。
要在你的电脑上使用 Git,首先需要安装 Git。如果你使用 IntelliJ IDEA,在系统中未找到 Git 时,它很可能会提示自动安装。我们建议接受该提示——这是最简单的方式。
通过选择 File > Close Project 关闭当前项目,然后点击 Clone Repository。
如果你想手动安装,请访问官方网站:https://git-scm.com/downloads。
8. 一点历史:main vs master
过去,Git 的默认分支被称为 master。但在 2020 年,开发者社区和包括 GitHub 在内的主要平台改用更加中性的术语——main。
了解这一点很重要,因为在一些旧文章或旧项目中,你仍可能看到 master 分支的描述。在我们的讲座和现代项目中,主分支一律为 main。
关于迁移到 main 的更多信息,请参阅:
GO TO FULL VERSION
🍟