首頁  >  文章  >  開發工具  >  實例詳解git init和git clone取得git倉庫

實例詳解git init和git clone取得git倉庫

WBOY
WBOY轉載
2022-04-02 13:18:293613瀏覽

本篇文章為大家帶來了關於Git的相關知識,其中主要介紹了git init和git clone獲取git倉庫的相關問題,包括了git clone 從已有的Git存儲數據庫中克隆倉庫到本地目錄等相關內容,希望對大家有幫助。

實例詳解git init和git clone取得git倉庫

推薦學習:《Git教學

使用git init和git clone取得git倉庫

通常取得git倉庫有兩種方式:

  • 將本機未進行版本控制的本機目錄轉換為Git倉庫;

  • 從其他伺服器上複製一個已存在的Git倉庫;

1 git init 在本地目錄上建立Git倉庫

git init [-q | --quiet] [--bare] [--template=<template_directory>]
           [--separate-git-dir <git dir>]
           [--shared[=<permissions>]] [directory]

該指令建立一個空的Git儲存資料庫,基本上會在.git目錄中建立objectsrefs/headsrefs/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資料夾,如下:
    git init --bare
  • #[--template=<template_directory>]
    用於在初始化Git倉庫時將模板資料夾中的檔案拷貝到我們初始化時的.git儲存資料庫中,如果不指定,預設拷貝的是/usr /share/git-core/templates路徑下的模板,裡麵包含如下內容:
    $ ls /usr/share/git-core/templates/
    branches  description  hooks  info
    如果指定自己預設路徑則初始化的Git儲存資料庫如下: git init --template
    其中模板依序可透過- -template=<DIR>設置,$GIT_TEMPLATE_DIR環境變數設置,init.templateDir 配置設置,並且依序覆寫下一層設定。
  • [--separate-git-dir <git dir>]
    預設git init會在目前目錄下建立一個.git 資料夾來儲存Git資料庫,此指令可指定一個路徑來初始化Git儲存資料庫,並在本機建立一個.git檔案來連結到指定的目錄中去:
    git init --separate
    可以看到本地只有一個.git文件,文件中描述了目前倉庫的Git儲存資料庫具體位置在哪裡,並自動連結過去。
  • [--shared[=<permissions>]]
    用來指定建立的Git儲存資料庫的讀寫權限,包括同組用戶,所有用戶等等權限設置,如果沒有指定默認是group權限。感興趣可以git init --help查看此選項具體用法。
  • [directory]
    如果指定了此選項,git init指令則會在此目錄中執行,如果目錄不存在也會建立該目錄。

2 git clone 從已有的Git儲存資料庫中複製倉庫到本地目錄

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.urlremote.origin.fetch 配置變數實現的。

  • [--template=<template_directory>]
    请看git init相关选项获取此选项作用。
  • [-l, --local]
    用于从本地Git存储仓库克隆Git存储数据库,此选项会拷贝本地的refs,HEAD等信息到克隆的Git存储数据库,并将.git/objects通过硬链接形式链接到本地Git存储库以节约本地空间。
    如果未指定-l选项但[url]是本地路径则还是会默认进行-l选项的行为,但是如果指定的是--no-local选项对本地仓库进行克隆则会走默认的git clone流程:
    git clone --no-local
  • [-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操作:
    git clone -n
  • [--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 pullgit 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教程

以上是實例詳解git init和git clone取得git倉庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除