git init

本页将深入探索 git init 命令。在本页结束时,您将了解 git init 的核心功能和扩展功能集。本次探索包括:

  • git init 选项和用法
  • .git 目录概述
  • 自定义 git init 目录环境值
  • git initgit clone
  • git init 裸存储库
  • git init 模板

git init 命令创建了一个新的 Git 存储库。它可用于将现有的未版本控制项目转换为 Git 存储库或初始化新的空存储库。大多数其他 Git 命令在初始化存储库外不可用,因此这通常是您将在新项目中运行的第一个命令。

执行 git init 会在当前工作目录中创建一个 .git 子目录,其中包含新存储库所有必需的 Git 元数据。此元数据包括对象、引用和模板文件的子目录。还会创建一个 HEAD 文件,该文件指向当前已签出的提交。

除了 .git 目录,在项目的根目录中,现有项目保持不变(与 SVN 不同,Git 不需要每个子目录中有 .git 子目录)。

默认情况下,git init 会将 Git 配置初始化为 .git 子目录路径。如果您希望子目录路径位于其他地方,可以对其进行修改和自定义。您可以将 $GIT_DIR 环境变量设置为自定义路径,git init 将在那里初始化 Git 配置文件。此外,您可以传递 --separate-git-dir 参数以获得相同的结果。单独的 .git 子目录的常见用例用于在主目录中保存您的系统配置 "dotfiles"(.bashrc.vimrc 等等),同时在其他地方保留 .git 文件夹。

使用

与 SVN 相比,git init 命令是一种创建新的版本控制项目的非常简单的方法。Git 不需要您创建存储库、导入文件和签出工作副本。此外,Git 不需要任何预先存在的服务器或管理员权限。您所要做的就是 cd 进入您的项目子目录并运行 git init,这样您就会有一个功能齐全的 Git 存储库。

git init

将当前目录转换为 Git 存储库。这会将 .git 子目录添加到当前目录,并可以开始记录项目的修订版本。

git init <directory>

在指定目录中创建一个空的 Git 存储库。运行此命令将创建一个名为 <directory> 的新子目录,其中只包含 .git 子目录。

如果您已经在项目目录上运行了 git init 并且它包含一个 .git 子目录,您可以安全地在同一个项目目录上再次运行 git init。它不会覆盖现有的 .git 配置。

git init 与 git clone

简要说明:git initgit clone 很容易混淆。在较高层面上,它们都可以用来“初始化一个新的 git 存储库。”但是,git clone 依赖于 git initgit clone 用于创建现有存储库的副本。在内部,git clone 首先调用 git init 来创建新的存储库。然后,它从现有存储库中复制数据,并签出一组新的工作文件。在 git config 页面上了解更多信息。

裸存储库 --- git init --bare

git init --bare <directory>

初始化一个空的 Git 存储库,但省略工作目录。共享存储库应始终使用 --bare 标记创建(参见下面的讨论)。传统上,使用 --bare 标记初始化的存储库以 .git 结尾。例如,名为 my-project 的存储库的裸版本应存储在名为 my-project.git 的目录中。

--bare 标记创建了一个没有工作目录的存储库,因此无法在该存储库中编辑文件和提交变更。您可以创建一个裸存储库进行 git push 和 git pull,但永远不要直接提交到该存储库。中央存储库应始终创建为裸存储库,因为将分支推送到非裸存储库可能会覆盖变更。可以将 --bare 看作是将存储库标记为存储设施的一种方式,而不是开发环境。这意味着,对于几乎所有 Git 工作流程,中央存储库都是裸存储库,而开发人员的本地存储库是非裸存储库。

Git 教程:裸存储库

git init --bare 最常见的用例是创建远程中央存储库:

ssh <user>@<host> cd path/above/repo git init --bare my-project.git

首先,您通过 SSH 连接到将包含您的中央存储库的服务器。然后,导航到想要存储项目的任何地方。最后,使用 --bare 标记来创建中央存储库。然后,开发人员将克隆 my-project.git 以在他们的开发计算机上创建本地副本。

git init 模板

git init <directory> --template=<template_directory>

初始化一个新的 Git 存储库并将文件从 复制到存储库中。

模板允许您使用预定义的 .git 子目录初始化新存储库。您可以将模板配置为具有默认目录和文件,这些目录和文件将复制到新存储库的 .git 子目录。默认 Git 模板通常位于 `/usr/share/git-core/templates` 目录中,但可能位于计算机上的不同路径。

默认模板是如何利用模板功能的良好参考和示例。默认模板中显示的模板的一个强大功能是 Git 钩子配置。您可以使用预定义的 Git 钩子创建模板,并使用随时可用的常用钩子初始化新的 git 存储库。要了解有关 Git 钩子的更多信息,请访问 Git 钩子页面

配置

git init 的所有配置都采用 参数。如果您提供 ,则命令将在其中运行。如果此目录不存在,则将创建该目录。除了已经讨论过的选项和配置外,Git init 还有其他一些命令行选项。它们的完整列表如下:

-Q

--QUIET

仅打印“紧急级别”消息、错误和警告。所有其他输出均静音。

--BARE

创建一个裸存储库。(请参阅上方的“裸存储库”部分。)

--TEMPLATE=

指定将从中使用模板的目录。(请参阅上面的“Git 初始化模板”部分。)

--SEPARATE-GIT-DIR=

创建一个包含到 路径的文本文件。此文件用作 .git 目录的链接。如果您想将您的 .git 目录存储在与项目工作文件不同的位置或硬盘上,这很有用。--separate-git-dir 的一些常见用例包括:

  • 用于在主目录中保存您的系统配置 "dotfiles"(.bashrc、.vimrc 等等),同时在其他地方保留 .git 文件夹
  • 您的 Git 历史记录已经变得非常大,您需要将其移到其他地方,到一个单独的大容量硬盘上
  • 您想在可公开访问的目录中有一个 Git 项目,比如 `www:root`

您可以在现有存储库上调用 git init --separate-git-dir,然后 .git dir 将移至指定的 路径。

--SHARED[=(FALSE|TRUE|UMASK|GROUP|ALL|WORLD|EVERYBODY|0XXX)]

设置新存储库的访问权限。这指定了允许哪些使用 UNIX 级别权限的用户和群组推送/拉取到存储库。

示例

为现有代码库创建新的 git 存储库

cd /path/to/code \ 
git init \ 
git add . \ 
git commit

新建裸存储库

git init --bare /path/to/repo.git

创建 git init 模板并从该模板初始化一个新的 git 存储库

mkdir -p /path/to/template \ 
echo "Hello World" >> /absolute/path/to/template/README \
git init /new/repo/path --template=/absolute/path/to/template \ 
cd /new/repo/path \ 
cat /new/repo/path/README

准备好了解 Git 了吗?

试用本交互式教程。

立即开始