git init命令:取消,主,--空白--模板选项
本文涵盖了一些与git init
命令相关的主题。
我们将简要描述git init
创建的.git
文件夹中的内容,改变默认的main
分支,--bare
和--template
选项,甚至如何撤销初始化。
由于Git是现代编程的支柱之一,我将从git init
开始,在每个主要话题上发表一篇文章。
1. 什么是git init?
git init
命令是git initialize的简称,用于用git开始对一个目录进行版本管理。
当我们以这种方式开始版本管理时,我们就被称为创建了一个新的git仓库。仓库包含很多元数据,包括对文件的修改、分支、标签和工作者信息。
当你用git init
命令创建一个新的仓库时,它在内部创建了一个.git
目录来存储版本管理所需的各种元数据。
下面的截图显示了由git init
命令创建的.git
目录的内部。
1.1. .git目录内的文件和目录说明
下面是对.git
目录内的文件和目录的简单介绍。
config
: 一个只包含当前版本库的设置的文件。这包括远程版本库的URL,是否裸露,分支设置等,并覆盖全局的git设置。默认的设置是
$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
HEAD
: 符号链接到您当前工作的分支。git 通过该文件跟踪您当前工作的分支。HEAD文件有以下值
$ cat HEAD
ref: refs/heads/main
description
: 一个包含当前版本库的简短描述的文件。各种git工具使用这个文件的内容来介绍版本库。如果没有注册,它将有下面的值。
$ cat descripton
Unnamed repository; edit this file 'description' to name the repository.
-
objects
: 你提交给git的所有东西都被存储为git对象。这个文件夹作为这些对象的数据库,使用SHA-1哈希值存储大多数东西,如Blobs、树和提交文件。 -
Refs
: 存放与分支、标签和远程分支的链接。它被分为三个子目录:head、tag和remotes。 -
info
: 一个包含关于当前版本库的额外信息的目录,主要用于管理通过exclude
文件夹从版本管理中排除的数据。它的作用类似于.gitignore
文件。 -
hooks
: 一个包含钩子脚本例子的目录,IGT可以在某些事件发生时自动运行。有针对不同情况的钩子脚本,如pre-commit,pre-rebase,等等。如果你想运行其中一个脚本,只需去掉文件名后面的`.sample'即可使其成为一个可执行文件。下面是钩子目录下的脚本。
这个git init
命令创建了一个新的资源库,并为与之相关的配置文件和数据腾出了空间。
2. 创建主分支
传统上,git的默认分支是master
,但由于各种原因,我们开始把它改为main
。现在,main
分支在默认情况下不需要任何配置,但根据不同的版本,你可能需要手动设置它。因此,在本节中我们将学习如何改变默认分支。
默认分支可以在git的全局设置中修改。在本地,这个设置只适用于你的账户。命令如下
$ git config --global init.defaultBranch main
设置完成后,如果你用git ini
t命令创建了一个新的 repo,你可以用下面的命令检查你当前正在工作的分支。
$ git branch
* main
如果你还没有进行第一次提交,你可以用下面的命令进行检查
$ git symbolic-ref HEAD
refs/heads/main
3. 选项--bare
在git init
命令的选项中,最受欢迎的是--bare
选项。这个选项用来创建一个远程仓库。
远程版本库是为允许多个开发者贡献和管理单个版本库而创建的版本库。它们应该在高度协作的环境中使用。常见的托管远程仓库的服务包括Github、GitLab和BitBucket。
考虑在Github上创建一个新的远程仓库的情况。如果没有--bare
选项,我们的新远程仓库将在Github服务器上创建特定于我们本地环境的数据和设置。
我们想要管理的是我们本地环境中的源代码。
在这种情况下,Github将使用--bare
选项来创建一个没有设置的空壳 repo,并将其作为远程 repo。
如果你没有使用像上面那样的托管服务,你想建立自己的git服务器并创建一个远程 repo,你就需要使用--bare
选项。它很容易使用。
$ git init --bare my_remote_repo.git
如上所示,你可以附加一个选项。有一点需要注意:一定要用.git
扩展名来命名你的裸仓库,因为这是许多远程仓库地址的惯例。
4) --模板选项
git init
命令总是创建相同的文件和目录结构。如果我们想在我们公司创建的10个不同的项目中添加相同的README.md
文件呢?你将不得不经历10次创建和修改文件的过程。
这就是--template
选项的用武之地,它可以帮助我根据自己的喜好创建一个新的 repo,而不必经历额外的修改过程。
顾名思义,它根据你的模板创建一个新的 repo,所有我们在第1.1节中看到的文件和目录都可以成为模板的目标。
4.1. 使用--模板选项
要创建一个自定义模板,首先要复制git init
命令所使用的默认模板。模板目录位于不同的地方,这取决于你的操作系统,所以我们建议你使用下面的命令来找到它。
$ find / -type d -name "templates" 2>/dev/null
在搜索结果中出现的许多路径中,git-core
目录内的templates
目录是我们要找的。
在Mac OS上,如果你使用默认安装的git,它存在于以下路径。模板里面的文件夹是这样的,你应该很熟悉,因为你已经在第1.1节中见过它们了。
一旦你复制了这个模板目录并添加了你想要的文件或文件夹,你可以通过两种方式之一创建一个新的 repo。
首先,你可以使用--template
选项,这将应用一次模板。
如果你想使用一个模板,但需要从项目到项目改变信息,这很有用。
该命令如下
$ git init --template=/path/of/template-dir
第二种方法是在全局设置中注册,并永久使用它。如果你每次都用相同的模板创建一个 repo,这将很有用。你可以使用以下命令。
$ git config --global init.templateDir /path/of/template-dir
你可以看到,即使你不给它一个模板选项,也会用模板创建一个新的 repo,并使用所需路径。
5. 取消、删除和卸载
有时你需要撤销git init
命令来进行版本控制。
这可以通过简单删除创建的.git
目录来实现。
你需要删除该目录下的所有文件和文件夹,因此键入以下命令。
$ rm -rf .git
如果你使用的是Windows命令提示符,输入以下命令
$ rmdir /s /q .git
如果你在Windows上使用Powershell,你需要输入以下命令。
Remove-Item -Recurse -Force .git
6. 总结
在这篇文章中,我们已经涵盖了与git init
命令有关的许多主题。
我们介绍了.git
文件夹中的内容,改变默认的 main
分支,--bare
和--template
选项,甚至如何撤销初始化。
我希望这能帮助你开始用Git创建新的仓库。
