git-init(1)
===========

NAME
----
git-init - Create an empty Git repository or reinitialize an existing one


SYNOPSIS
--------
[synopsis]
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>]


DESCRIPTION
-----------

This command creates an empty Git repository - basically a `.git`
directory with subdirectories for `objects`, `refs/heads`,
`refs/tags`, and template files.  An initial branch without any
commits will be created (see the `--initial-branch` option below
for its name).

If the `GIT_DIR` environment variable is set then it specifies a path
to use instead of `./.git` for the base of the repository.

If the object storage directory is specified via the
`GIT_OBJECT_DIRECTORY` environment variable then the sha1 directories
are created underneath; otherwise, the default `$GIT_DIR/objects`
directory is used.

Running `git init` in an existing repository is safe. It will not
overwrite things that are already there. The primary reason for
rerunning `git init` is to pick up newly added templates (or to move
the repository to another place if `--separate-git-dir` is given).

OPTIONS
-------

`-q`::
`--quiet`::

Only print error and warning messages; all other output will be suppressed.

`--bare`::

Create a bare repository. If `GIT_DIR` environment is not set, it is set to the
current working directory.

`--object-format=<format>`::
Specify the given object _<format>_ (hash algorithm) for the repository.  The valid
values are `sha1` and (if enabled) `sha256`.  `sha1` is the default.
+
include::object-format-disclaimer.adoc[]

`--ref-format=<format>`::
Specify the given ref storage _<format>_ for the repository. The valid values are:
+
include::ref-storage-format.adoc[]

`--template=<template-directory>`::
Specify the directory from which templates will be used.  (See the "TEMPLATE
DIRECTORY" section below.)

`--separate-git-dir=<git-dir>`::
Instead of initializing the repository as a directory to either `$GIT_DIR` or
`./.git/`, create a text file there containing the path to the actual
repository.  This file acts as a filesystem-agnostic Git symbolic link to the
repository.
+
If this is a reinitialization, the repository will be moved to the specified path.

`-b <branch-name>`::
`--initial-branch=<branch-name>`::
Use _<branch-name>_ for the initial branch in the newly created
repository.  If not specified, fall back to the default name (currently
`master`, but this is subject to change in the future; the name can be
customized via the `init.defaultBranch` configuration variable).

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

Specify that the Git repository is to be shared amongst several users.  This
allows users belonging to the same group to push into that
repository.  When specified, the config variable `core.sharedRepository` is
set so that files and directories under `$GIT_DIR` are created with the
requested permissions.  When not specified, Git will use permissions reported
by `umask`(2).
+
The option can have the following values, defaulting to `group` if no value
is given:
+
--
`umask`::
`false`::

Use permissions reported by `umask`(2). The default, when `--shared` is not
specified.

`group`::
`true`::

Make the repository group-writable, (and `g+sx`, since the git group may not be
the primary group of all users). This is used to loosen the permissions of an
otherwise safe `umask`(2) value. Note that the umask still applies to the other
permission bits (e.g. if umask is `0022`, using `group` will not remove read
privileges from other (non-group) users). See `0xxx` for how to exactly specify
the repository permissions.

`all`::
`world`::
`everybody`::

Same as `group`, but make the repository readable by all users.

_<perm>_::

_<perm>_ is a 3-digit octal number prefixed with `0` and each file
will have mode _<perm>_. _<perm>_ will override users' `umask`(2)
value (and not only loosen permissions as `group` and `all`
do). `0640` will create a repository which is group-readable, but
not group-writable or accessible to others. `0660` will create a repo
that is readable and writable to the current user and group, but
inaccessible to others (directories and executable files get their
`x` bit from the `r` bit for corresponding classes of users).
--

By default, the configuration flag `receive.denyNonFastForwards` is enabled
in shared repositories, so that you cannot force a non fast-forwarding push
into it.

If you provide a _<directory>_, the command is run inside it. If this directory
does not exist, it will be created.

TEMPLATE DIRECTORY
------------------

Files and directories in the template directory whose name do not start with a
dot will be copied to the `$GIT_DIR` after it is created.

The template directory will be one of the following (in order):

 - the argument given with the `--template` option;

 - the contents of the `$GIT_TEMPLATE_DIR` environment variable;

 - the `init.templateDir` configuration variable; or

 - the default template directory: `/usr/share/git-core/templates`.

The default template directory includes some directory structure, suggested
"exclude patterns" (see linkgit:gitignore[5]), and sample hook files.

The sample hooks are all disabled by default. To enable one of the
sample hooks rename it by removing its `.sample` suffix.

See linkgit:githooks[5] for more general info on hook execution.

EXAMPLES
--------

Start a new Git repository for an existing code base::
+
----------------
$ cd /path/to/my/codebase
$ git init      <1>
$ git add .     <2>
$ git commit    <3>
----------------
+
<1> Create a `/path/to/my/codebase/.git` directory.
<2> Add all existing files to the index.
<3> Record the pristine state as the first commit in the history.

CONFIGURATION
-------------

include::includes/cmd-config-section-all.adoc[]

:git-init:

include::config/init.adoc[]

GIT
---
Part of the linkgit:git[1] suite
