菜鸟科技网

git init 命令具体作用是什么?

git init 命令详解

核心功能

git init 的核心功能是:将一个普通的目录转换成一个 Git 仓库

git init 命令具体作用是什么?-图1
(图片来源网络,侵删)

执行这个命令后,Git 会在该目录下创建一个名为 .git 的隐藏子目录,这个 .git 目录是 Git 仓库的“心脏”,它包含了所有跟踪和管理项目版本历史所需的核心文件和配置。

git init 就是告诉 Git:“嘿,从现在开始,这个目录下的文件变化要你来管了!”

如何使用

基本语法非常简单:

git init [目录名]
  • 不带参数:如果你在当前目录下执行 git init,Git 会在当前目录初始化一个仓库。
  • 带参数:如果你指定一个目录名(git init my-project),Git 会在指定的子目录中创建一个新的仓库,并自动进入该目录。

示例:

git init 命令具体作用是什么?-图2
(图片来源网络,侵删)

假设你有一个项目文件夹 my-website

# 1. 创建并进入项目目录
mkdir my-website
cd my-website
# 2. 初始化 Git 仓库
git init
# 3. 查看结果(你会看到一个隐藏的 .git 目录)
ls -a
# 输出将会包含 .git

执行后,你的 my-website 目录就变成了一个 Git 仓库。

git init 做了什么?(深入理解 .git 目录)

当你运行 git init 后,Git 创建的 .git 目录里通常包含以下关键文件和子目录:

  • HEAD:一个指向当前分支的引用,在初始化时,它默认指向 master 分支。
  • config:仓库的配置文件,存储了仓库级别的设置,比如远程仓库的 URL、用户名等。
  • description:仅供 GitWeb 程序使用的描述文件,可以修改。
  • hooks/:包含客户端和服务端的钩子脚本,这些脚本可以在特定事件(如 commitpush)发生时自动执行。
  • info/:包含一个全局的 exclude 文件,用于指定哪些文件或目录应该被 Git 忽略(类似于 .gitignore,但只针对当前仓库)。
  • objects/:这是 Git 存储所有数据的地方,所有的文件内容、提交信息、树结构等都会被压缩成对象并存储在这里,它分为 infopack 两个子目录。
  • refs/:存储分支(heads/)和标签(tags/)的引用,每个分支都指向一个提交的 SHA-1 值。

注意git init 创建的是一个“空仓库”(bare repository)吗? 不是git init 默认创建的是一个“工作目录”(working directory),也叫“非空仓库”(non-bare repository),它包含了 .git 目录,同时也允许你在其中直接编辑文件,还有一个 git init --bare 命令,它只创建 .git 目录,而没有工作目录,通常用于创建一个仅供推送和拉取的中央仓库。

git init 命令具体作用是什么?-图3
(图片来源网络,侵删)

工作流程:git init 之后做什么?

仅仅 git init 是不够的,它只是第一步,一个完整的工作流程通常是这样的:

  1. 初始化仓库

    git init
  2. 添加文件到暂存区: 使用 git add 命令将你想要提交的文件添加到暂存区,暂存区是一个区域,用来存放下一次将要提交的文件快照。

    # 添加单个文件
    git add index.html
    # 添加所有文件
    git add .
  3. 提交到本地仓库: 使用 git commit 命令将暂存区的文件快照永久地保存到 Git 仓库中,每次提交都应该附带一个清晰、有意义的提交信息。

    git commit -m "Initial commit: Add HTML and CSS files"

至此,你的第一个版本就已经被安全地保存在本地 Git 仓库中了。

重要注意事项与最佳实践

  • 只应在项目根目录执行:你只需要在项目的根目录执行一次 git init,不要在子目录中重复执行。

  • .gitignore 文件:在 git init 之后,第一件事就应该是创建一个 .gitignore 文件,这个文件告诉 Git 忽略哪些不需要被版本控制的文件或目录,

    • 依赖包目录(如 node_modules/, vendor/
    • 编译后的文件(如 *.log, dist/
    • 环境配置文件(如 .env
    • IDE 配置文件(如 .vscode/, .idea/) 忽略这些文件可以避免仓库臃肿,并防止将敏感信息(如密码)提交到代码库中。
  • git init vs. git clone

    • git init:用于在本地的一个全新目录中创建一个全新的仓库。
    • git clone:用于从远程(如 GitHub, GitLab)复制一个已经存在的仓库到本地,如果你要加入一个已有的项目,应该使用 git clone
  • 重新初始化仓库: 如果你在一个已经初始化过的 Git 仓库中再次运行 git init,通常不会有任何破坏性影响,Git 会重置一些配置,但不会删除你的 .git 目录或已有的提交历史,这不是一个推荐的操作。

常见问题

Q: 我不小心 git init 错了目录,怎么办? A: 如果你刚刚执行,并且还没有添加和任何文件,最简单的方法就是直接删除 .git 目录:

rm -rf .git

警告rm -rf 是一个强大的命令,请确保你删除的是正确的目录,以免误删重要文件。

Q: git init 之后,我后悔了,想撤销怎么办? A: 和上面一样,删除 .git 目录即可,这会让你的目录变回一个普通的、未被 Git 管理的目录。


git init 是 Git 版本控制的起点,它通过创建 .git 目录,将一个普通目录转变为一个功能强大的 Git 仓库。git init 之后,你需要使用 git addgit commit 来开始记录你的项目历史,养成尽早创建 .gitignore 文件的好习惯,会让你的 Git 生涯更加顺畅。

分享:
扫描分享到社交APP
上一篇
下一篇