推薦學習:《》
通常獲取git倉庫有兩種方式:
將本地未進行版本控制的本地目錄轉換為Git倉庫;
從其他伺服器上克隆一個已存在的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
目錄作為一個儲存庫的基礎。
如果objects
目錄是通過$GIT_OBJECT_DIRECTORY
環境變數指定的,那麼在此目錄下建立sha1目錄,否則就是預設的$GIT_DIR/objects
目錄。
在已有的Git儲存庫中執行git init
是安全的,他不會覆蓋已存在的東西。重新執行git init
的主要原因是獲取新新增的模板(或者如果是--separate-git-dir
選項,則將Git儲存庫移到另一個地方)。
[-q, --quite]
[--bare]
.git
資料夾,如下:[--template=<template_directory>]
.git
儲存資料庫中,如果不指定,預設拷貝的是/usr/share/git-core/templates
路徑下的模板,裡面包括如下內容:$ ls /usr/share/git-core/templates/ branches description hooks info如果指定自己預設路徑則初始化的Git儲存資料庫如下:
--template=<DIR>
設定,$GIT_TEMPLATE_DIR
環境變數設定,init.templateDir
設定設定,並且依次覆蓋下一級設定。[--separate-git-dir <git dir>]
git init
會在當前目錄下建立一個.git
資料夾來儲存Git資料庫,此命令可指定一個路徑來初始化Git儲存資料庫,並在本地建立一個.git
檔案來連結到指定的目錄中去:.git
檔案,檔案中描述了當前倉庫的Git儲存資料庫具體位置在哪裡,並自動連結過去。[--shared[=<permissions>]]
group
許可權。感興趣可以git init --help
檢視此選項具體用法。[directory]
git init
命令則會在此目錄中執行,如果目錄不存在還會建立該目錄。git clone [--template=<template_directory>] [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>] [--dissociate] [--separate-git-dir <git dir>] [--depth <depth>] [--[no-]single-branch] [--no-tags] [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules] [--[no-]remote-submodules] [--jobs <n>] [--sparse] [--] <repository> [<directory>]
克隆一個倉庫到新被建立的目錄中,為克隆的Git儲存庫中每個分支建立遠端跟蹤分支(通過git branch --remotes
可檢視跟蹤分支),並建立和檢出克隆倉庫當前活躍的分支到本地初始分支。
克隆完成後,一個不帶引數的git fetch
命令可以更新所有遠端跟蹤分支,並且不帶引數的git pull
命令還會將遠端主分支合併到當前分支中。
這個預設設定是通過在refs/remotes/origin
下建立對遠端分支頭的參照並且初始化remote.origin.url
和remote.origin.fetch
設定變數實現的。
[--template=<template_directory>]
git init
相關選項獲取此選項作用。[-l, --local]
refs
,HEAD
等資訊到克隆的Git儲存資料庫,並將.git/objects
通過硬連結形式連結到本地Git儲存庫以節約本地空間。-l
選項但[url]
是本地路徑則還是會預設進行-l
選項的行為,但是如果指定的是--no-local
選項對本地倉庫進行克隆則會走預設的git clone
流程:[-s, --shared]
.git/objects
的物件通過硬連結的方式連結到原生的克隆倉庫,使用此選項不會再硬連結.git/objects
目錄,而是在原生的.git/objects/info
目錄中建立一個alternates
檔案並在其中描述objects
原先的位置並進行共用使用。git commit
內部可能自動呼叫git gc --atuo
)刪除的,從而導致倉庫被破壞。-s
選項克隆的儲存庫中執行git repack
時,如果沒有指定--local,-l
選項,則會將源儲存庫中的objects
複製到克隆儲存庫中的一個包裡面,從而消除了--shared
選項帶來的共用效果和節省的空間。直接執行git gc
是安全的,因為預設使用的--local,-l
選項。-s
選項指定的倉庫中打破對共用的依賴,則可以使用git repack -a
命令將源儲存庫中的所有物件複製到克隆的儲存庫的一個包中。[--no-hardlinks]
.git/objects
中的內容而不是使用硬連結的形式,在進行Git儲存庫備份時這個選項就很有用。[-q, --quite]
[-n, --no-checkout]
[--bare]
<directory>/.git
目錄也不會將管理檔案放到<directory>/.git
中,而是為自己建立一個<directory>
或者<directory>.git
目錄,裡面儲存的就是實際的Git資料庫。這個選項也預設是--no-checkout
的,不會檢出任何HEAD,也不會自動跟蹤任何遠端分支,也不會建立相關的設定變數。[--mirror]
--bare
,對比--bare
,--mirror
不僅僅對映源的本地分支到目標的本地分支,它還對映所有參照(包括遠端跟蹤分支,筆記等),並設定refspec設定,以便所有這些參照都被目標儲存庫中的git遠端更新覆蓋。--bare
和--mirror
都是針對伺服器使用,因為伺服器只需要儲存Git儲存資料庫而不需要實際操作git命令,所以當你在這兩個選項建立的儲存庫執行Git命令會得到下面的列印:fatal: this operation must be run in a work tree
[-o <name>, --origin <name>]
<name>
來跟蹤遠端倉庫。[-b <name>, --branch <name>]
<name>
分支。[-u <upload-pack>, --upload-pack <upload-pack>]
/usr/bin/git-upload-pack
,當伺服器的git執行時會自動找到此路徑的程式。[--reference[-if-able] <repository>]
.git/objects/info/alternates
檔案來從參照源儲存庫來獲取objects
,使用已經存在的Git儲存庫作為替代將會需要更少的objects
被從源儲存庫拷貝過來,從而降低網路和本地儲存成本。當使用--reference-if-able
時,會跳過不存在的目錄,並行出警告,而不是中止克隆。[--dissociate]
--reference
參照的Git儲存庫借用objects
物件僅減少網路傳輸,並且在通過對借用objects
進行必要的本地複製來進行克隆後,停止從參照庫中借用物件。當本地克隆已經從另一個儲存庫借用objects
時,可以使用此選項來停止新儲存庫從相同的儲存庫借用objects
。此選項也主要用於Git伺服器。[--separate-git-dir <git dir>]
git init
相關選項獲取此選項作用。[--depth <depth>]
<depth>
指定,並獲取所有分支頂部提交往後<depth>
提交數量克隆到本地。如果也想簡單克隆子模組也可以傳遞--shallow-submodules
選項。[--[no-]single-branch]
--single-branch
只會克隆Git儲存庫中指定的一個分支,遠端Git儲存庫中其他分支不會在本地被克隆下來,也不會在本地跟蹤其他遠端分支,只會跟蹤單個遠端分支。[--no-tags]
remote.<remote>.tarOpt=--no-tags
,以確保後續git pull
和git fetch
也不會操作到標籤,除非顯式的操作標籤。--single-branch
一起使用,以維護單個分支,在只維護某個預設分支時很有用。[--recurse-submodules[=<pathspec>]]
<pathspec>
初始化並克隆子模組,如果沒有指定<pathspec>
則所有子模組都被初始化和克隆。對於有多個條目的<parhspec>
可以多次給出此選項。git submodule update --init --recursive <pathspec>
。[--[no-]shallow-submodules]
[--[no-]remote-submodules]
--remote
選項傳遞給git submodule update
。[-j <n>, --jobs <n>]
submodule.fetchJobs
。[--sparse]
[--]
<repository>
https
協定也可以是ssh
協定或者git
協定等等。[<directory>]
-v, --verbose
[-c <key>=<value>, --config <key>=<value]
推薦學習:《》
以上就是範例詳解git init和git clone獲取git倉庫的詳細內容,更多請關注TW511.COM其它相關文章!