diff options
Diffstat (limited to 'Documentation/git-init.adoc')
-rw-r--r-- | Documentation/git-init.adoc | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/Documentation/git-init.adoc b/Documentation/git-init.adoc new file mode 100644 index 0000000000..a0dffba665 --- /dev/null +++ b/Documentation/git-init.adoc @@ -0,0 +1,189 @@ +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 |