Skip to content
Snippets Groups Projects
git-init.txt 5.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    git-init(1)
    ===========
    
    NAME
    ----
    git-init - Create an empty Git repository or reinitialize an existing one
    
    
    SYNOPSIS
    --------
    [verse]
    
    'git init' [-q | --quiet] [--bare] [--template=<template-directory>]
    	  [--separate-git-dir <git-dir>] [--object-format=<format>]
    
    	  [-b <branch-name> | --initial-branch=<branch-name>]
    
    	  [--shared[=<permissions>]] [<directory>]
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    
    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).
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    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.txt[]
    
    --template=<template-directory>::
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    Specify the directory from which templates will be used.  (See the "TEMPLATE
    DIRECTORY" section below.)
    
    
    --separate-git-dir=<git-dir>::
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    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 filesystem-agnostic Git symbolic link to the
    repository.
    +
    If this is reinitialization, the repository will be moved to the specified path.
    
    
    --initial-branch=<branch-name>::
    
    
    Use the specified 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>)]::
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    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' (or 'false')::
    
    Use permissions reported by umask(2). The default, when `--shared` is not
    specified.
    
    'group' (or 'true')::
    
    Make the repository group-writable, (and g+sx, since the git group may be not
    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' (or 'world' or 'everybody')::
    
    Same as 'group', but make the repository readable by all users.
    
    
    '<perm>'::
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    
    '<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'
    does). '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).
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    --
    
    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
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    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.
    
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    CONFIGURATION
    -------------
    
    include::includes/cmd-config-section-all.txt[]
    
    include::config/init.txt[]
    
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    GIT
    ---
    Part of the linkgit:git[1] suite