本篇文章為大家帶來了關於Git的相關知識,其中主要介紹了git init和git clone獲取git倉庫的相關問題,包括了git clone 從已有的Git存儲數據庫中克隆倉庫到本地目錄等相關內容,希望對大家有幫助。
推薦學習:《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
儲存資料庫中,如果不指定,預設拷貝的是/usr /share/git-core/templates
路徑下的模板,裡麵包含如下內容:$ ls /usr/share/git-core/templates/ branches description hooks info
- -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教程》
以上是實例詳解git init和git clone取得git倉庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!