git-clone - 将存储库克隆到新目录中
转自git官网https://git-scm.com/docs/git-clone
概要
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] [--rerserse-submodules [= <pathspec>]] [ - [no-] shallow-submodules] [--jobs <n>] [ - ] <repository> [<directory>]
描述
将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(可见使用git branch -r),并创建并检出从克隆存储库的当前活动分支分叉的初始分支。
在克隆之后,git fetch没有参数的普通版将更新所有远程跟踪分支,并且git pull无参数将另外将远程主分支合并到当前主分支中(如果有的话)(当“–single-branch”为时,这是不真实的)给出;见下文)。
此默认配置是通过在refs/remotes/origin初始化remote.origin.url和remote.origin.fetch 配置变量下创建对远程分支头的引用来实现的。
OPTIONS
- 本地
-l
当要克隆的存储库位于本地计算机上时,此标志会绕过正常的“Git感知”传输机制,并通过制作HEAD副本以及对象和refs目录下的所有内容来克隆存储库。目录下的.git/objects/文件是硬链接的,以便在可能的情况下节省空间。
如果将存储库指定为本地路径(例如/path/to/repo),则这是默认值,而–local本质上是无操作。如果将存储库指定为URL,则忽略此标志(并且我们从不使用本地优化)。使用常规Git传输–no-local时/path/to/repo,指定将覆盖默认值。
–no-硬链接
从本地文件系统上的存储库强制克隆进程,以复制目录下的.git/objects 文件,而不是使用硬链接。如果您尝试备份存储库,则可能需要这样做。
- 共享
-s
当要克隆的存储库位于本地计算机上而不是使用硬链接时,会自动设置 .git/objects/info/alternates为与源存储库共享对象。生成的存储库在没有任何自己的对象的情况下开始。
注意:这是一个可能危险的操作; 你不,除非你了解它使用它。如果使用此选项克隆存储库,然后在源存储库中删除分支(或使用任何其他任何现有提交未引用的Git命令),则某些对象可能会变为未引用(或悬空)。这些对象可以通过git commit自动调用的普通Git操作(例如)来删除git gc --auto。(请参阅git-gc [1]。)如果删除了这些对象并被克隆的存储库引用,则克隆的存储库将损坏。
请注意,在克隆的存储库中git repack没有-l选项的情况下运行-s会将源存储库中的对象复制到克隆存储库中的包中,从而节省磁盘空间clone -s。但是,运行是安全的,默认情况下git gc使用该-l选项。
如果要打破-s在其源存储库中克隆的存储库的依赖关系,只需运行git repack -a将源存储库中的所有对象复制到克隆存储库中的包中。
–reference [-if-able]
如果引用存储库位于本地计算机上,则自动设置.git/objects/info/alternates以从引用存储库获取对象。使用现有存储库作为备用存储库将需要从克隆的存储库中复制更少的对象,从而降低网络和本地存储成本。使用时–reference-if-able,将跳过不存在的目录,并显示警告而不是中止克隆。
注意:请参阅–shared选项的注释以及 --dissociate选项。
- 分离
从–reference仅使用选项指定的引用存储库中借用对象以减少网络传输,并在通过制作必要的借用对象本地副本进行克隆后停止从它们借用。当从已经从另一个存储库借用对象的存储库本地克隆时,也可以使用此选项 - 新存储库将从同一存储库中借用对象,并且此选项可用于停止借用。
- 安静
-q
安静地操作。未向标准错误流报告进度。
–verbose
-v
详细地运行。不影响将进度状态报告给标准错误流。
- 进展
除非指定了-q,否则在将标准错误流附加到终端时,默认情况下会报告进度状态。即使标准错误流未定向到终端,此标志也会强制进度状态。
–no结账
-n
克隆完成后不会检查HEAD。
- 裸
制作一个简单的 Git存储库。也就是说,不是创建和放置管理文件,而是/.git使 自己成为$GIT_DIR。这显然意味着-n 因为无处可查看工作树。此外,远程处的分支头直接复制到相应的本地分支头,而不将其映射到refs/remotes/origin/。使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。
- 镜子
设置源存储库的镜像。这意味着–bare。相比之下–bare,–mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有引用(包括远程跟踪分支,注释等)并设置refspec配置,以便所有这些引用被a git remote update中的a覆盖。目标存储库。
–origin
-o
而不是使用远程名称origin来跟踪上游存储库,请使用。
–branch
-b
而不是将新创建的HEAD指向克隆存储库的HEAD指向的分支,而是指向分支。在非裸存储库中,这是将要检出的分支。 --branch也可以在结果存储库中的提交处获取标记并分离HEAD。
–upload-pack
-u
给定时,通过ssh访问要克隆的存储库,这将指定另一端运行的命令的非默认路径。
–template = <template_directory>
指定将使用模板的目录; (参见git-init [1]的“TEMPLATE DIRECTORY”部分。)
–config =
-c =
在新创建的存储库中设置配置变量; 这在初始化存储库之后,但在获取远程历史记录或检出任何文件之前立即生效。密钥的格式与git-config [1](例如core.eol=true)的预期格式相同 。如果为同一个键指定了多个值,则每个值都将写入配置文件。例如,这样就可以安全地向源远程添加额外的fetch refspec。
由于当前实现的限制,一些配置变量在初始提取和检出之后才会生效。已知不生效的配置变量是: remote..mirror和remote..tagOpt。使用相应–mirror和–no-tags选项来代替。
–depth
创建一个浅层克隆,其历史记录被截断为指定的提交数。意味着–single-branch除非 --no-single-branch获取所有分支的提示附近的历史。如果要浅层克隆子模块,也要传递–shallow-submodules。
–shallow-因为= <日期>
在指定时间后创建具有历史记录的浅层克隆。
–shallow - 排除= <修订>
创建具有历史记录的浅层克隆,不包括可从指定的远程分支或标记访问的提交。可以多次指定此选项。
- [无糖]单支
仅克隆导致单个分支的提示的历史记录,由–branch选项或主分支远程的HEAD点指定。进一步提取到生成的存储库只会更新分支的远程跟踪分支,此选项用于初始克隆。如果在进行–single-branch克隆时远程处的HEAD未指向任何分支,则不会创建远程跟踪分支。
–no标签
不要克隆任何标记,并remote..tagOpt=–no-tags在配置中设置 ,以确保将来git pull和git fetch操作不会遵循任何标记。后续的显式标记提取仍然有效(参见git-fetch [1])。
可以与–single-branch克隆和维护分支一起使用,除了单个克隆分支之外没有引用。这对于维护某些存储库的默认分支的最小克隆以用于搜索索引是有用的。
–recurse-子模块[= <pathspec]
创建克隆后,根据提供的pathspec初始化和克隆子模块。如果未提供pathspec,则初始化并克隆所有子模块。对于包含多个条目的pathspec,可以多次给出此选项。生成的克隆已submodule.active设置为提供的pathspec或“。” (如果没有提供pathspec,则表示所有子模块)。
子模块使用其默认设置进行初始化和克隆。这相当于git submodule update --init --recursive 克隆完成后立即运行 。如果克隆库不具有worktree /结帐忽略此选项(即如果任何的–no-checkout/ -n,–bare或–mirror给出)
- [无糖]浅子模块
克隆的所有子模块都是浅的,深度为1。
–separate-git-dir =
不要将克隆的存储库放在应有的位置,而是将克隆的存储库放在指定的目录中,然后创建一个与文件系统无关的Git符号链接。结果是Git存储库可以与工作树分开。
-j
–jobs
同时获取的子模块数。默认为该submodule.fetchJobs选项。
<库>
要从中克隆的(可能是远程的)存储库。有关指定存储库的更多信息,请参阅下面的 GIT URLS部分。
<目录>
要克隆到的新目录的名称。如果没有明确给出目录(repofor /path/to/repo.git和foo for host.xz:foo/.git),则使用源存储库的“人性化”部分。仅当目录为空时才允许克隆到现有目录中。