发布于 2026-01-06 2 阅读
0

Git 深度解析:“git init” 你可能知道的 你可能不知道的 总结 DEV 全球展示挑战赛 由 Mux 呈现:推介你的项目!

Git 深度解析:“git init”

你可能知道

你可能不知道的事

包起来

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

本文是系列文章的第一篇,我们将深入探讨我们经常习以为常的 Git 常见组成部分。

而开启本系列的最佳方式莫过于使用启动所有 git 仓库的命令:git init

你可能知道

git init创建一个新的代码仓库!想在 Git 中进行版本控制吗?只需运行命令git init,砰!——该目录现在就变成了一个 Git 代码仓库。

以下是它的实际运行效果:

终端中的 git init 示例
在初始化 Git 仓库之前,诸如 `git 命令` 之类的 Git 命令git status在目录中将无法运行。

完成这些步骤后,你就可以在 Git 中执行各种炫酷的操作了,例如add`git add`、 commit`git mergepull`、`git add` 等等!……不过这些命令我们将在另一篇文章中介绍。我们这里主要关注 `git add` 的用法git init。让我们仔细看看……

你可能不知道的事

💡 仓库的初始化方式

git init它初始化仓库时实际做了什么?当你运行该命令时,它会创建一个名为“:”的隐藏目录.git

git init 创建 .git 目录的屏幕截图

.git/包含了 Git 版本控制运行所需的所有幕后数据。所有分支信息、历史变更、当前状态等等都保存在这里。以下是该目录的内容示例:

.git 文件和文件夹的屏幕截图

我们这里就不详细讲解每个目录和文件的具体作用了。大部分内容都难以阅读,只能通过 Git 来操作。你只需要知道,这种.git/子目录结构(或者说大部分结构)是 Git 正常运行所必需的。

如果你愿意,甚至可以手动创建.git/目录及其所有内容,Git 仍然会将其识别为一个仓库(有空的时候不妨试试!哪些文件是必需的?哪些不是?)。这也意味着,如果你删除.git现有仓库中的目录,所有分支和 Git 历史记录也会被删除。如果你正处于项目初期,想要重新启动一个仓库,并从当前工作文件开始初始化,这实际上非常有用。只需rm -rf .git重新创建目录git init即可。

💡 所有存储库数据都存储在.git/

我们通常认为 Git 存储的是历史数据,而工作目录(除 `git` 目录之外的所有内容.git/)则包含当前文件。但需要记住的是,Git,或者更准确地说,是 ` .gitgit` 目录,包含了所有数据——包括最近提交的更改。事实上,你甚至可以git clone直接从.git`git` 目录执行操作,就像从远程仓库执行操作一样!

原树
现在有两个了!

💡 使用以下命令创建一个“远程”存储库--bare

你知道吗?你其实可以push双向访问pull本地工作仓库。不过,你可能会遇到一些问题。看看当我们尝试将master分支推送到本地工作仓库(该分支master也已检出)时会发生什么:

git错误
Git 说“不!”

这就是为什么你通常会从远程仓库而不是其他人的工作仓库进行推送和拉取操作的原因。大多数情况下,这种远程仓库的设置是通过BitbucketGitHub等 Git 仓库服务来完成的,但如果你想设置自己的远程仓库,则需要使用--bare相应的标志:

--裸旗演示

认出这些文件和目录了吗?它们和我们之前在隐藏仓库里看到的一模一样.git,只不过现在它们不再被隐藏文件夹包裹了!没错,它们……裸露在外!😮 所以,这被称为“裸仓库”也就不足为奇了。有了裸仓库——嗯,我的意思是——实际上是在告诉 Git:“这里没人工作。你只需要存储数据,让用户推送和拉取代码。”

既然这里没人工作,你其实不需要.git目录之外的任何东西。既然不需要.git目录之外的东西,为什么不把所有.git内容都放在根目录呢?

💡嘘

最后……你是git init不是太吵了?

git init 的屏幕截图男子捂住耳朵,猫从旁边走过

-q用旗帜制止所有可怕的噪音--quiet

git init -q 的截图
终于可以享受片刻宁静了!

包起来

我希望这篇文章能帮助您更好地理解git init代码仓库的工作原理和创建过程。如需进一步了解,您可以查看以下内容:

敬请期待本系列的下一篇文章,我将在其中介绍一个稍微有趣一些的命令:git add


您觉得这篇文章有用吗?欢迎关注我的个人主页或在 Twitter 上关注我,获取更多开发者技巧和文章资讯!

文章来源:https://dev.to/zaklaughton/git-deep-dive-git-init-2kg8