Git
English ▾ 主题 ▾ 最新版本 ▾ git-init 最后更新于 2.47.0

名称

git-init - 创建一个空的 Git 仓库或重新初始化一个现有的仓库

概要

git init [-q | --quiet] [--bare] [--template=<template-directory>]
	  [--separate-git-dir <git-dir>] [--object-format=<format>]
	  [--ref-format=<format>]
	  [-b <branch-name> | --initial-branch=<branch-name>]
	  [--shared[=<permissions>]] [<directory>]

描述

此命令创建一个空的 Git 仓库 - 基本上是一个包含 objectsrefs/headsrefs/tags 和模板文件的子目录的 .git 目录。将创建一个没有任何提交的初始分支(有关其名称,请参阅下面的 --initial-branch 选项)。

如果设置了 $GIT_DIR 环境变量,则它指定要使用的路径,而不是 ./.git 作为仓库的根目录。

如果通过 $GIT_OBJECT_DIRECTORY 环境变量指定了对象存储目录,则 sha1 目录将在其下创建;否则,将使用默认的 $GIT_DIR/objects 目录。

在现有仓库中运行 git init 是安全的。它不会覆盖已存在的内容。重新运行 git init 的主要原因是获取新添加的模板(或者如果给出了 --separate-git-dir,则将仓库移动到另一个位置)。

选项

-q
--quiet

仅打印错误和警告消息;所有其他输出都将被抑制。

--bare

创建一个裸仓库。如果未设置 GIT_DIR 环境,则将其设置为当前工作目录。

--object-format=<format>

为仓库指定给定的对象 <format>(哈希算法)。有效值为 sha1 和(如果已启用)sha256sha1 是默认值。

注意:目前,SHA-256 仓库和 SHA-1 仓库之间不存在互操作性。

从历史上看,我们警告说,当我们引入此类互操作性功能时,SHA-256 仓库可能以后需要向后不兼容的更改。如今,我们只期望兼容的更改。此外,如果证明此类更改是必要的,则可以预期使用当今 Git 创建的 SHA-256 仓库将可供未来版本的 Git 使用,而不会丢失数据。

--ref-format=<format>

为仓库指定给定的 ref 存储 <format>。有效值为

  • files 用于带有 packed-refs 的松散文件。这是默认值。

  • reftable 用于 reftable 格式。此格式为实验性格式,其内部结构可能会发生变化。

--template=<template-directory>

指定将使用模板的目录。(请参阅下面的“模板目录”部分。)

--separate-git-dir=<git-dir>

不要将仓库初始化为 $GIT_DIR./.git/ 的目录,而是在那里创建一个文本文件,其中包含指向实际仓库的路径。此文件充当指向仓库的与文件系统无关的 Git 符号链接。

如果这是一个重新初始化操作,则仓库将移动到指定的路径。

-b <branch-name>
--initial-branch=<branch-name>

对新创建的仓库使用 <branch-name> 作为初始分支。如果未指定,则回退到默认名称(目前为 master,但这在将来可能会更改;名称可以通过 init.defaultBranch 配置变量自定义)。

--shared[=(false|true|umask|group|all|world|everybody|<perm>)]

指定 Git 仓库要由多个用户共享。这允许属于同一组的用户推送到该仓库。指定后,将设置配置变量 core.sharedRepository,以便使用请求的权限创建 $GIT_DIR 下的文件和目录。如果未指定,Git 将使用 umask(2) 报告的权限。

该选项可以具有以下值,如果未给出值,则默认为 group

umask
false

使用 umask(2) 报告的权限。默认情况下,当未指定 --shared 时。

group
true

使仓库对组可写(以及 g+sx,因为 git 组可能不是所有用户的 primary group)。这用于放宽其他安全 umask(2) 值的权限。请注意,umask 仍然适用于其他权限位(例如,如果 umask 为 0022,则使用 group 不会从其他(非组)用户中删除读取权限)。请参阅 0xxx 以了解如何准确指定仓库权限。

all
world
everybody

group 相同,但使所有用户都可以读取仓库。

<perm>

<perm> 是一个以 0 为前缀的 3 位八进制数,每个文件都将具有模式 <perm><perm> 将覆盖用户的 umask(2) 值(而不仅仅是像 groupall 那样放宽权限)。0640 将创建一个对组可读但不可写或对其他人不可访问的仓库。0660 将创建一个对当前用户和组可读和可写的仓库,但对其他人不可访问(目录和可执行文件从对应类用户的 r 位获取其 x 位)。

默认情况下,在共享仓库中启用了配置标志 receive.denyNonFastForwards,因此您无法强制将非快进推送推送到其中。

如果您提供了一个 <directory>,则将在其中运行该命令。如果此目录不存在,则将创建它。

模板目录

模板目录中名称不以点开头的文件和目录将在创建 $GIT_DIR 后复制到 $GIT_DIR

模板目录将是以下之一(按顺序):

  • 使用 --template 选项给出的参数;

  • $GIT_TEMPLATE_DIR 环境变量的内容;

  • init.templateDir 配置变量;或

  • 默认模板目录:/usr/share/git-core/templates

默认模板目录包含一些目录结构、建议的“排除模式”(请参阅 gitignore[5])和示例钩子文件。

默认情况下,所有示例钩子都已禁用。要启用其中一个示例钩子,请重命名它,删除其 .sample 后缀。

有关钩子执行的更多一般信息,请参阅 githooks[5]

示例

为现有代码库启动一个新的 Git 仓库
$ cd /path/to/my/codebase
$ git init      (1)
$ git add .     (2)
$ git commit    (3)
  1. 创建一个 /path/to/my/codebase/.git 目录。

  2. 将所有现有文件添加到索引中。

  3. 将原始状态记录为历史记录中的第一次提交。

配置

本节中此行以下的所有内容都从 git-config[1] 文档中选择性地包含。内容与那里找到的内容相同

init.templateDir

指定将从中复制模板的目录。

init.defaultBranch

允许覆盖默认分支名称,例如在初始化新仓库时。

init.defaultObjectFormat

允许覆盖新仓库的默认对象格式。请参阅 git-init[1] 中的 --object-format=。命令行选项和 GIT_DEFAULT_HASH 环境变量都优先于此配置。

init.defaultRefFormat

允许覆盖新仓库的默认 ref 存储格式。请参阅 git-init[1] 中的 --ref-format=。命令行选项和 GIT_DEFAULT_REF_FORMAT 环境变量都优先于此配置。

Git

git[1] 套件的一部分

scroll-to-top