本章節将深入探讨git init 命令。主要包括如下内容
git init命令會創建一個新的 Git 倉庫庫。它可用于将現有的、未進行版本控制的項目轉換為 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-倉庫的文件
除了.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-倉庫配置文件位置
除了上面示例中我們必須進入項目目錄進行初始化之外,還可以在項目目錄之外給 git init 命令指定項目目錄來進行初始化倉庫。
git init <directory>
Git-在項目目錄之外初始化倉庫
如果我們已經在一個項目目錄上運行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 <directory>
初始化空的Git倉庫,但忽略工作目錄。共享倉庫應始終使用--bare标志創建。通常,使用--bare标志初始化的倉庫以.git結尾。例如,名為 repo 的倉庫的裸版本應該存儲在名為repo.git的目錄中。
--bare标志會創建一個沒有工作目錄的倉庫,從而無法在該倉庫中編輯文件和提交更改。我們可能會創建一個用于git push和git pull的裸倉庫,但絕不會直接在這個裸倉庫上進行提交。應始終将中央倉庫創建為裸倉庫,因為将分支推送到非裸倉庫可能會覆蓋更改。應該将--bare認為是一種将倉庫标記為存儲設施而不是開發環境的方法。這意味着,對于幾乎所有的Git工作流,中央倉庫是空的,而開發人員的本地倉庫是非空的。
Git 中央倉庫架構
git init --bare最常見的應用場景是創建一個遠程中央倉庫:
git init --bare repo.git
使用--bare标志創建一個中央倉庫。然後,開發人員将克隆 repo.git 從而在他們的開發機器上創建本地副本。
git 初始化模闆
git init <directory> --template=<template_directory>
初始化一個新的 Git 倉庫并将文件從 <template_directory>複制 到倉庫中。
模闆允許我們使用預定義的.git子目錄初始化新倉庫。可以将模闆配置為具有将被複制到新倉庫的.git子目錄的默認目錄和文件。默認的 Git 模闆通常位于/usr/share/git-core/templates目錄中,但不同機器上可能位于不同的路徑中。
默認模闆是如何利用模闆功能的一個很好的參考和示例。默認模闆中展示的模闆的一個強大功能是 Git Hook 配置。可以使用預定義的 Git 鈎子創建模闆,并使用準備就緒的常用鈎子初始化新的 git 倉庫。
我們會在以後的章節中對 Git Hook 進行介紹。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!