您好,登錄后才能下訂單哦!
這篇文章主要講解了“git init和git clone獲取git倉庫的方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“git init和git clone獲取git倉庫的方法”吧!
通常獲取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倉庫時將模板文件夾中的文件拷貝到我們初始化時的.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>]]
用于指定創建的Git存儲數據庫的讀寫權限,包括同組用戶,所有用戶等等權限設置,如果沒有指定默認是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]
用于從本地Git存儲倉庫克隆Git存儲數據庫,此選項會拷貝本地的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的命令(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]
克隆完成后不執行檢出HEAD操作:
[--bare]
創建一個裸的Git倉庫。也就是說不創建<directory>/.git
目錄也不會將管理文件放到<directory>/.git
中,而是為自己創建一個<directory>
或者<directory>.git
目錄,里面保存的就是實際的Git數據庫。這個選項也默認是--no-checkout
的,不會檢出任何HEAD,也不會自動跟蹤任何遠程分支,也不會創建相關的配置變量。
[--mirror]
設置源Git存儲庫的鏡像。類似于--bare
,對比--bare
,--mirror
不僅僅映射源的本地分支到目標的本地分支,它還映射所有引用(包括遠程跟蹤分支,筆記等),并設置refspec配置,以便所有這些引用都被目標存儲庫中的git遠程更新覆蓋。
注意:--bare
和--mirror
都是針對服務器使用,因為服務器只需要保存Git存儲數據庫而不需要實際操作git命令,所以當你在這兩個選項創建的存儲庫執行Git命令會得到下面的打印:
fatal: this operation must be run in a work tree
[-o <name>, --origin <name>]
未使用此選項時默認使用origin來跟蹤遠程倉庫,使用此選項后使用<name>
來跟蹤遠程倉庫。
[-b <name>, --branch <name>]
不要將新創建的HEAD指向克隆倉庫HEAD指向的分支,而是指向<name>
分支。
[-u <upload-pack>, --upload-pack <upload-pack>]
在使用ssh訪問要克隆的Git存儲庫時,它為另一端運行的命令指定了一個非默認的路徑。這個選項主要針對Git服務器使用,為服務器使用的git等指定了一個路徑。一般是/usr/bin/git-upload-pack
,當服務器的git運行時會自動找到此路徑的程序。
[--reference[-if-able] <repository>]
如果引用的Git存儲庫在本地機器上,自動的會設置.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]
所有被克隆的子模塊都淺克隆深度為1。
[--[no-]remote-submodules]
所有被克隆的子模塊的遠程跟蹤分支的狀態來更新子模塊,而不是記錄在Git數據庫中的SHA1。相當于將--remote
選項傳遞給git submodule update
。
[-j <n>, --jobs <n>]
同時取出的子模塊數,默認是配置submodule.fetchJobs
。
[--sparse]
稀疏檢出模式,所謂稀疏檢出就是本地版本庫檢出時不檢出全部,只將指定的文件從本地版本庫檢出到工作區,而其他未指定的文件則不予檢出(即使這些文件存在于工作區,其修改也會被忽略)。這里不詳細介紹此功能。
[--]
無實際作用,只是為了將選項和操作對象分開以便易于區分。
<repository>
要克隆的倉庫,可能是遠程倉庫,也可能是本地倉庫,可以是https
協議也可以是ssh
協議或者git
協議等等。
[<directory>]
如果指定了此目錄,則會將Git倉庫克隆到此目錄中。
-v, --verbose
冗長輸出克隆信息。
[-c <key>=<value>, --config <key>=<value]
在克隆倉庫時為新創建的Git存儲庫設置一個配置變量,在克隆完成后立即生效
感謝各位的閱讀,以上就是“git init和git clone獲取git倉庫的方法”的內容了,經過本文的學習后,相信大家對git init和git clone獲取git倉庫的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。