# git-init
> 原文: [https://git-scm.com/docs/git-init](https://git-scm.com/docs/git-init)
>
> 貢獻者:[honglyua](https://github.com/honglyua)
## 名稱
git-init - 創建一個空的Git存儲庫或重新初始化現有存儲庫
## 概要
```
git init [-q | --quiet] [--bare] [--template=<template_directory>]
[--separate-git-dir <git dir>]
[--shared[=<permissions>]] [directory]
```
## 描述
此命令創建一個空的Git存儲庫 - 基本上是一個`.git`目錄,其中包含`objects`,`refs/heads`,`refs/tags`和模板文件的子目錄。還創建了引用主分支HEAD的初始`HEAD`文件。
如果設置了`$GIT_DIR`環境變量,則它指定要使用的路徑而不是`./.git`作為存儲庫的基礎。
如果通過`$GIT_OBJECT_DIRECTORY`環境變量指定了對象存儲目錄,則在下面創建sha1目錄 - 否則使用默認的`$GIT_DIR/objects`目錄。
在現有存儲庫中運行 _git init_ 是安全的。它不會覆蓋已存在的東西。重新運行 _git init_ 的主要原因是獲取新添加的模板(或者如果給出了--separate-git-dir,則將存儲庫移動到另一個地方)。
## 選項
```
-q
```
```
--quiet
```
僅打印錯誤和警告消息;所有其他輸出都將被抑制。
```
--bare
```
創建一個裸存儲庫。如果未設置`GIT_DIR`環境,則將其設置為當前工作目錄。
```
--template=<template_directory>
```
指定將使用模板的目錄。 (參見下面的“模板目錄”部分。)
```
--separate-git-dir=<git dir>
```
不是將存儲庫初始化為`$GIT_DIR`或`./.git/`的目錄,而是在其中創建包含實際存儲庫路徑的文本文件。此文件充當與文件系統無關的Git符號鏈接到存儲庫。
如果這是重新初始化,則存儲庫將移動到指定的路徑。
```
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]
```
指定要在多個用戶之間共享Git存儲庫。這允許屬于同一組的用戶進入該存儲庫。指定時,將設置配置變量“core.sharedRepository”,以便使用請求的權限創建`$GIT_DIR`下的文件和目錄。未指定時,Git將使用umask(2)報告的權限。
該選項可以具有以下值,如果沒有給出值,則默認為 _group_:
```
umask (or false)
```
使用umask(2)報告的權限。未指定`--shared`時,使用默認值。
```
group (or true)
```
使存儲庫可寫,(和g + sx,因為git group可能不是所有用戶的主要組)。這用于放寬其他安全的umask(2)值的權限。請注意,umask仍然適用于其他權限位(例如,如果umask是 _0022_ ,則使用 _group_ 將不會刪除其他(非組)用戶的讀取權限)。有關如何準確指定存儲庫權限的信息,請參見 _0xxx_ 。
```
all (or world or everybody)
```
與 _group_ 相同,但使所有用戶都可以讀取存儲庫。
```
0xxx
```
_0xxx_ 是一個八進制數,每個文件都有模式 _0xxx_ 。 _0xxx_ 將覆蓋用戶的umask(2)值(并且不僅松開 _group_ 和 _all_ 的權限)。 _0640_ 將創建一個可讀取組的存儲庫,但不能寫入組或其他人可訪問的存儲庫。 _0660_ 將創建一個對當前用戶和組可讀寫的repo,但其他人無法訪問。
默認情況下,配置標志`receive.denyNonFastForwards`在共享存儲庫中啟用,因此您無法強制執行非快進推送。
如果您提供 _目錄_,則命令在其中運行。如果此目錄不存在,則將創建該目錄。
## 模板目錄
模板目錄中名稱不以點開頭的文件和目錄將在創建后復制到`$GIT_DIR`。
模板目錄將是以下之一(按順序):
* 使用`--template`選項給出的參數;
* `$GIT_TEMPLATE_DIR`環境變量的內容;
* `init.templateDir`配置變量;要么
* 默認模板目錄:`/usr/share/git-core/templates`。
默認模板目錄包括一些目錄結構,建議“排除模式”(參見 [gitignore [5]](https://git-scm.com/docs/gitignore) )和示例鉤子文件。
默認情況下,示例鉤子均已禁用。要啟用其中一個示例鉤子,請通過刪除其`.sample`后綴來重命名它。
有關鉤子執行的更多常規信息,請參見 [githooks [5]](https://git-scm.com/docs/githooks) 。
## 例子
```
基于存量代碼,初始化一個新git庫
```
```
$ cd /path/to/my/codebase
$ git init (1)
$ git add . (2)
$ git commit (3)
```
1. 創建一個/path/to/my/codebase/.git目錄。
2. 將所有現有文件添加到索引中。
3. 將原始狀態記錄為歷史記錄中的第一個提交。
## GIT
部分 [git [1]](https://git-scm.com/docs/git) 套件
- git
- git-config
- git-help
- git-init
- git-clone
- git-add
- git-status
- git-diff
- git-commit
- git-reset
- git-rm
- git-mv
- git-branch
- git-checkout
- git-merge
- git-mergetool
- git-log
- git-stash
- git-tag
- git-worktree
- git-fetch
- git-pull
- git-push
- git-remote
- git-submodule
- git-show
- git-log
- git-shortlog
- git-describe
- git-apply
- git-cherry-pick
- git-rebase
- git-revert
- git-bisect
- git-blame
- git-grep
- gitattributes
- giteveryday
- gitglossary
- githooks
- gitignore
- gitmodules
- gitrevisions
- gittutorial
- gitworkflows
- git-am
- git-format-patch
- git-send-email
- git-request-pull
- git-svn
- git-fast-import
- git-clean
- git-gc
- git-fsck
- git-reflog
- git-filter-branch
- git-instaweb
- git-archive
- git-bundle
- git-daemon
- git-update-server-info
- git-cat-file
- git-check-ignore
- git-checkout-index
- git-commit-tree
- git-count-objects
- git-diff-index
- git-for-each-ref
- git-hash-object
- git-ls-files
- git-merge-base
- git-read-tree
- git-rev-list
- git-rev-parse
- git-show-ref
- git-symbolic-ref
- git-update-index
- git-update-ref
- git-verify-pack
- git-write-tree