Git 仓库 — 是项目源代码的存储库,Git 在其中跟踪整个开发过程中文件的每一次更改。仓库包含提交、分支和标签的完整历史记录,使开发人员能够协同处理代码。根据 Git,2024 的数据,仓库是任何版本控制系统的基础,并在全球数百万个项目中使用。
要点
Git 仓库 — 是一种数据结构,版本控制系统在其中存储描述项目文件更改历史的元数据和对象。当开发人员使用 git init 命令初始化仓库时,Git 会在项目的根目录创建一个隐藏的 .git 文件夹。
这个文件夹中包含系统运行所需的所有对象、引用和配置文件。仓库不绑定到特定位置 — 开发人员可以在本地创建它,然后连接到远程服务器。
Git 使用分布式仓库模型:项目的每个参与者在其计算机上都有一份完整的历史副本。这意味着大多数操作 — 提交、查看历史、创建分支 — 都在本地执行,无需访问服务器。
根据 Git 文档,分布式架构使系统能够抵抗故障:如果服务器宕机,任何本地仓库都可以成为恢复项目完整历史的来源。
本地仓库 — 是开发人员计算机上的项目副本。它包含提交、分支和标签的完整历史记录,并允许在没有网络连接的情况下执行提交、分支、合并和变基操作。
远程仓库托管在服务器上,作为所有团队成员的同步点。开发人员使用 git push 命令发送他们的更改,并使用 git pull 命令获取其他人的更改。
本地仓库和远程仓库之间的连接通过 remote origin 配置 — 这是存储在 Git 配置中的服务器 URL。一个本地仓库可以连接到多个远程仓库,这在处理分支派生时非常有用。
这种模式的主要优点是开发人员可以在离线状态下处理代码,并且仅在准备好发送结果时才同步更改。
| 特性 | 本地 | 远程 |
|---|---|---|
| 位置 | 在开发人员的计算机上 | 在服务器上(GitHub、GitLab) |
| 无网络访问 | 完全访问所有操作 | 无连接时不可用 |
| 同步 | 与远程推送/拉取 | 接收本地的推送 |
| 备份 | 不受数据丢失保护 | 存储在服务器上并备份 |
Git 的存储模型与其他版本控制系统有根本不同。Git 不存储版本之间的更改列表(增量),而是存储每次提交时所有项目文件的完整快照。
仓库中的每个对象由一个唯一的 40 字符长度 SHA-1 哈希标识。如果文件内容在提交之间没有更改,Git 不会创建新对象,而是重复使用现有对象 — 这节省了空间。
Git 使用四种对象类型:blob(文件内容)、tree(目录结构)、commit(带元数据的快照)和 tag(指向提交的命名引用)。所有对象都存储在 .git/objects 文件夹中。
根据 Git Internals,Git 的对象模型确保数据完整性:文件内容的任何更改都会产生新的哈希值,从而使得悄然修改历史变得不可能。
.git 文件夹 — 是仓库的心脏。没有它,Git 无法跟踪更改,而普通目录只是一组文件。了解此文件夹的结构有助于诊断仓库问题。
HEAD 文件值得特别注意。在正常情况下,它包含对分支的符号引用,例如 ref: refs/heads/main。在分离 HEAD 状态下,它直接指向一个提交 — 这意味着新的提交将不会附加到任何分支。
使用 Git 仓库 包括开发人员每天执行的一组基本操作。每个操作都更改仓库的状态,添加新对象或移动引用。
Push 和 pull 操作 — 是唯一需要连接到远程服务器的操作。所有其他操作完全在本地执行,即使在历史记录很大的情况下也能确保高工作速度。
仓库中的每个文件都经历四种状态:untracked(未跟踪)、modified(已修改)、staged(已暂存)和 committed(已提交)。Git 只跟踪通过 git add 显式添加或已经在提交历史中的文件。
理解这个模型 — 是高效使用 Git 的关键。开发人员可以选择性地只准备部分修改的文件进行提交,创建逻辑完整且描述清晰的提交。
远程仓库通常托管在提供 Web 界面、访问管理系统和协作开发附加工具的专业平台上。
平台的选择取决于团队规模、隐私要求和所需的集成。对于移动开发,通常选择 GitHub,因为它有广泛的社区支持以及与 iOS 和 Android 的 CI/CD 工具的集成。
让我们考虑一个实际场景:开发人员克隆现有仓库,创建一个新分支,进行更改,然后将它们发送到服务器。每个命令都演示了与仓库不同组件的交互。
# 克隆远程仓库
git clone https://github.com/user/mobile-app.git
# 进入项目目录
cd mobile-app
# 创建新的 feature 分支并切换到该分支
git checkout -b feature/auth
# 检查已修改文件的状态
git status
# 将所有更改添加到暂存区
git add .
# 创建带有描述的提交
git commit -m "Add authentication module"
# 将更改推送到远程仓库
git push origin feature/auth
git status 命令 — 日常工作中最有用的命令之一。它显示哪些文件已修改,哪些已准备提交,以及哪些完全不被 Git 跟踪。
使用带有各种格式化标志的 git log 命令来分析仓库历史。它显示提交的时间顺序、提交者、日期和 SHA-1 标识符。
# 查看带有分支图可视化的历史记录
git log --oneline --graph --all
# 查看特定提交中的更改
git show a1b2c3d
# 比较当前状态与上一次提交
git diff HEAD
# 查看特定文件的历史记录
git log --follow src/MainActivity.kt
--graph 标志显示分支的 ASCII 图谱,这在具有多个分支活跃工作的仓库中特别有用。对于发布频繁的移动项目,可视化图谱有助于快速评估开发结构。
常见问题
仓库 — 是带有更改历史记录的代码技术存储库。项目 — 是一个更广泛的概念,包括仓库、任务管理系统、文档和开发流程。一个项目可能包含多个仓库。
通过单击 New 按钮在 GitHub Web 界面中创建一个新的仓库。指定名称、描述和访问级别。然后将存储库克隆到本地计算机,或通过 git remote add origin 连接现有的本地仓库。
如果远程仓库已从服务器中删除,但至少有一个开发人员拥有本地副本,则可以恢复该仓库。只需创建一个新的远程仓库,并从具有完整历史记录的本地副本执行 git push --force。
Fork — 是他人仓库在您帐户上的副本。您将获得完整的历史记录副本,并且可以做出任何更改而不影响原始项目。Fork 用于通过 Pull Request 参与开源项目。
使用 git gc 压缩对象并删除不可达的数据。通过 git filter-branch 或 git filter-repo 从历史记录中删除大文件。对于包含二进制文件的项目,请考虑 Git LFS(大文件存储)。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。