欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Android学习总结之git篇

Android学习总结之git篇

2025/4/19 19:27:53 来源:https://blog.csdn.net/2301_80329517/article/details/147256715  浏览:    关键词:Android学习总结之git篇

 Git 的原理时,你可以从数据结构、对象存储、引用管理、分支与合并等方面结合源码进行分析。以下是详细介绍:

1. 基本数据结构和对象存储

Git 底层主要基于四种对象来存储数据:blob(数据块)、tree(树)、commit(提交)和 tag(标签)。这些对象都存储在 .git/objects 目录下,以哈希值作为文件名。

Blob 对象

Blob 对象用于存储文件的内容。当你执行 git add 命令时,文件内容会被计算哈希值,并存储为一个 Blob 对象。以下是简化的 Java 代码示例,模拟创建 Blob 对象的过程:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class BlobObject {public static String createBlob(String filePath) throws IOException, NoSuchAlgorithmException {File file = new File(filePath);FileInputStream fis = new FileInputStream(file);byte[] data = new byte[(int) file.length()];fis.read(data);fis.close();MessageDigest digest = MessageDigest.getInstance("SHA-1");byte[] hash = digest.digest(data);StringBuilder sb = new StringBuilder();for (byte b : hash) {sb.append(String.format("%02x", b));}return sb.toString();}
}
Tree 对象

Tree 对象用于表示目录结构,它包含了 Blob 对象和其他 Tree 对象的引用。Tree 对象的哈希值同样基于其内容计算得出。

Commit 对象

Commit 对象记录了一次提交的元数据,包括父提交、作者、提交信息等。每次执行 git commit 时,会创建一个新的 Commit 对象。

Tag 对象

Tag 对象用于给某个特定的提交打标签,方便后续引用。

2. 引用管理

Git 使用引用(refs)来指向特定的 Commit 对象。常见的引用包括分支(branches)和标签(tags),它们存储在 .git/refs 目录下。

分支

分支实际上是一个指向 Commit 对象的引用。当你执行 git branch 命令时,Git 会在 .git/refs/heads 目录下创建一个新的文件,文件内容为该分支所指向的 Commit 对象的哈希值。

标签

标签与分支类似,只不过标签是一个固定的引用,不会随着新的提交而移动。标签存储在 .git/refs/tags 目录下。

3. 分支与合并

分支切换

当你执行 git checkout 命令切换分支时,Git 会更新 HEAD 引用,使其指向新的分支。HEAD 引用存储在 .git/HEAD 文件中,它通常指向当前分支的引用文件。

合并操作

合并操作分为快进合并(Fast-forward)和三方合并(Three-way merge)。

  • 快进合并:当一个分支是另一个分支的直接后继时,Git 会直接将当前分支的引用指针向前移动到目标分支的位置。
  • 三方合并:当两个分支有不同的提交历史时,Git 会找到两个分支的共同祖先(Base),然后将 Base、当前分支和目标分支的内容进行合并。合并结果会生成一个新的 Commit 对象。

4. 分布式版本控制

Git 是一个分布式版本控制系统,每个开发者的本地仓库都包含完整的版本历史。当你执行 git clone 命令时,会将远程仓库的所有对象和引用复制到本地。

远程仓库与本地仓库的交互
  • git fetch:从远程仓库获取最新的对象和引用,但不会合并到本地分支。
  • git pull:相当于 git fetch 和 git merge 的组合,会将远程分支的更新合并到本地分支。
  • git push:将本地分支的提交推送到远程仓库。

常用的 Git 指令:

仓库操作

  • git clone <仓库地址>:从远程仓库复制项目到本地。例如,若要克隆一个 GitHub 上名为 example-repo 的仓库,指令如下:
git clone https://github.com/username/example-repo.git
  • git init:在当前目录创建一个新的 Git 仓库。进入想要创建仓库的目录,然后执行:
git init

提交操作

  • git add <文件路径>:把文件的修改添加到暂存区。若要添加所有修改的文件,可使用:
git add .
  • git commit -m "提交信息":将暂存区的修改提交到本地仓库。提交信息要清晰地说明此次提交的内容,例如:
git commit -m "修复登录页面的样式问题"
  • git commit --amend:对上一次提交进行修改,可用于补充遗漏的文件或者修改提交信息。

分支操作

  • git branch:列出本地所有分支。
  • git branch <分支名>:创建一个新的分支。例如创建一个名为 feature-new 的分支:
git branch feature-new
  • git checkout <分支名>:切换到指定的分支。切换到 feature-new 分支:
git checkout feature-new
  • git checkout -b <分支名>:创建并切换到新的分支。创建并切换到 bugfix 分支:
git checkout -b bugfix
  • git merge <分支名>:将指定分支的修改合并到当前分支。若要将 feature-new 分支合并到当前分支:
git merge feature-new
  • git branch -d <分支名>:删除指定的本地分支。删除 feature-new 分支:
git branch -d feature-new

远程仓库操作

  • git remote add <远程仓库名> <仓库地址>:将本地仓库与远程仓库关联。通常远程仓库名为 origin,关联操作如下:
git remote add origin https://github.com/username/example-repo.git
  • git push <远程仓库名> <分支名>:把本地分支的修改推送到远程仓库。将本地的 main 分支推送到 origin 远程仓库:
git push origin main
  • git pull <远程仓库名> <分支名>:从远程仓库拉取指定分支的修改并合并到本地分支。拉取 origin 远程仓库的 main 分支更新:
git pull origin main
  • git fetch <远程仓库名>:从远程仓库获取最新的分支和提交信息,但不进行合并。

查看信息

  • git status:查看当前仓库的状态,包括文件的修改、添加和删除情况。
  • git log:查看提交历史记录。
  • git diff:查看工作区与暂存区文件的差异。若要查看暂存区与上一次提交的差异,可使用 git diff --staged

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词