目錄
使用git init和git clone取得git倉庫
1 git init 在本地目錄上建立Git倉庫
2 git clone 從已有的Git儲存資料庫中複製倉庫到本地目錄
首頁 開發工具 Git 實例詳解git init和git clone取得git倉庫

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

Apr 02, 2022 pm 01:18 PM
git

本篇文章為大家帶來了關於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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

git怎么生成ssh密鑰 git怎么生成ssh密鑰 Apr 17, 2025 pm 01:36 PM

為了安全連接遠程 Git 服務器,需要生成包含公鑰和私鑰的 SSH 密鑰。生成 SSH 密鑰的步驟如下:打開終端,輸入命令 ssh-keygen -t rsa -b 4096。選擇密鑰保存位置。輸入密碼短語以保護私鑰。將公鑰複製到遠程服務器上。將私鑰妥善保存,因為它是訪問帳戶的憑據。

git怎麼刪除倉庫 git怎麼刪除倉庫 Apr 17, 2025 pm 04:03 PM

要刪除 Git 倉庫,請執行以下步驟:確認要刪除的倉庫。本地刪除倉庫:使用 rm -rf 命令刪除其文件夾。遠程刪除倉庫:導航到倉庫設置,找到“刪除倉庫”選項,確認操作。

git賬戶怎麼添加公鑰 git賬戶怎麼添加公鑰 Apr 17, 2025 pm 02:42 PM

如何將公鑰添加到 Git 賬戶?步驟:生成 SSH 密鑰對。複製公鑰。在 GitLab 或 GitHub 中添加公鑰。測試 SSH 連接。

git提交後怎麼回退 git提交後怎麼回退 Apr 17, 2025 pm 01:06 PM

要回退 Git 提交,可以使用 git reset --hard HEAD~N 命令,其中 N 代表要回退的提交數量。詳細步驟包括:確定要回退的提交數量。使用 --hard 選項以強制回退。執行命令以回退到指定的提交。

git服務器怎麼連接公網 git服務器怎麼連接公網 Apr 17, 2025 pm 02:27 PM

將 Git 服務器連接到公網包括五個步驟:1. 設置公共 IP 地址;2. 打開防火牆端口(22、9418、80/443);3. 配置 SSH 訪問(生成密鑰對、創建用戶);4. 配置 HTTP/HTTPS 訪問(安裝服務端、配置權限);5. 測試連接(使用 SSH 客戶端或 Git 命令)。

git怎麼檢測ssh git怎麼檢測ssh Apr 17, 2025 pm 02:33 PM

要通過 Git 檢測 SSH,需要執行以下步驟:生成 SSH 密鑰對。將公鑰添加到 Git 服務器。配置 Git 使用 SSH。測試 SSH 連接。根據實際情況解決可能遇到的問題。

git代碼衝突怎麼處理 git代碼衝突怎麼處理 Apr 17, 2025 pm 02:51 PM

代碼衝突是指當多個開發者修改同一段代碼導致 Git 合併時無法自動選擇更改而出現的衝突。解決步驟包括:打開有衝突的文件,找出衝突代碼。手動合併代碼,將要保留的更改複製到衝突標記內。刪除衝突標記。保存並提交更改。

git commit怎麼用 git commit怎麼用 Apr 17, 2025 pm 03:57 PM

Git Commit 是一種命令,將文件變更記錄到 Git 存儲庫中,以保存項目當前狀態的快照。使用方法如下:添加變更到暫存區域編寫簡潔且信息豐富的提交消息保存並退出提交消息以完成提交可選:為提交添加簽名使用 git log 查看提交內容

See all articles