git init 初始化本地仓库——迹忆客-ag捕鱼王app官网
本章节将深入探讨git init 命令。主要包括如下内容
- git init 选项和用法
- .git 目录概览
- 自定义git init目录环境值
- git init 对比 git clone
- git init 空仓库
- git init 模板
git init
命令会创建一个新的 git 仓库库。它可用于将现有的、未进行版本控制的项目转换为 git 仓库或初始化一个新的空的仓库。大多数 git 命令在初始化仓库之外都不可用,所以说这是进行其他操作的基础。如果不是在仓库内进行其他的git 命令操作,将会出现如下错误。

执行git init会在当前工作目录中创建一个子目录.git
,其中包含新仓库所需的所有 git 元数据。此元数据包括对象、引用和模板文件等子目录。还会创建一个head
文件,指向当前签出的提交。
下面我们以 /root/workspace/repo 为例,看一下git init 生成的内容
$ cd /root/worksapce/repo
$ git init
initialized empty git repository in /root/workspace/repo/.git/
命令执行成功之后,使用tree
命令看一下所有的内容
$ tree

除了.git目录之外,项目的根目录中现有的其他目录或文件保持不变。
与svn不同,git不需要在每个子目录中都创建一个
.git
子目录。
默认情况下,git init
会将 git 配置初始化到.git
子目录中。如果想要将这些配置放到其他地方,可以修改和自定义子目录路径。我们可以将$git_dir
环境变量设置为自定义路径,git init会在执行的时候读取该环境变量,并在那里初始化 git 配置文件。此外,我们还可以在 git init 命令后面指定参数--separate-git-dir
来设置配置项存放的路径。--separate-git-dir 的优先级要高于设置 $git_dir。
$ git init --separate-git-dir=/root/.git_repo
这时会在 /root/.git_repos 目录下生成所有的配置文件
除了上面示例中我们必须进入项目目录进行初始化之外,还可以在项目目录之外给 git init 命令指定项目目录来进行初始化仓库。
git init
如果我们已经在一个项目目录上运行
git init
命令并且它包含一个.git子目录,那么我们可以放心地在同一个项目目录上再次运行git init
。它不会覆盖现有.git配置。
git init 与 git clone
快速说明:git init
与 git clone
很容易混淆。它们都可以用于“初始化一个新的 git 仓库”。但是,git clone 依赖于 git init。git clone用于创建现有仓库的副本。在内部,git clone 首先调用 git init以创建新仓库。然后它从现有仓库复制数据,并检出一组新的工作文件。访问git clone 页面了解更多信息。
裸仓库 --- git init --bare
git init --bare
初始化空的git仓库,但忽略工作目录。共享仓库应始终使用--bare标志创建。通常,使用--bare
标志初始化的仓库以.git
结尾。例如,名为 repo 的仓库的裸版本应该存储在名为repo.git
的目录中。
--bare
标志会创建一个没有工作目录的仓库,从而无法在该仓库中编辑文件和提交更改。我们可能会创建一个用于git push
和git pull
的裸仓库,但决不会直接在这个裸仓库上进行提交。应始终将中央仓库创建为裸仓库,因为将分支推送到非裸仓库可能会覆盖更改。应该将--bare
认为是一种将仓库标记为存储设施而不是开发环境的方法。这意味着,对于几乎所有的git工作流,中央仓库是空的,而开发人员的本地仓库是非空的。
git init --bare
最常见的应用场景是创建一个远程中央仓库:
$ git init --bare repo.git
使用--bare
标志创建一个中央仓库。然后,开发人员将克隆 repo.git 从而在他们的开发机器上创建本地副本。
git 初始化模板
git init --template=
初始化一个新的 git 仓库并将文件从
复制 到仓库中。
模板允许我们使用预定义的.git
子目录初始化新仓库。可以将模板配置为具有将被复制到新仓库的.git
子目录的默认目录和文件。默认的 git 模板通常位于/usr/share/git-core/templates
目录中,但不同机器上可能位于不同的路径中。
默认模板是如何利用模板功能的一个很好的参考和示例。默认模板中展示的模板的一个强大功能是 git hook 配置。可以使用预定义的 git 钩子创建模板,并使用准备就绪的常用钩子初始化新的 git 仓库。
我们会在以后的章节中对 git hook 进行介绍。