git-clone 将存储库克隆到新目录

代码格式如下:

git clone https://userName:password@链接
示例:
git clone -b develop --single-branch https://zhao:12345.com@*.git daima

# 如果用户名使用的是邮箱,那么 @ 符号需要转义成 %40,否则会无法识别邮箱,与 Git 仓库地址前面的 @ 造成冲突:
git clone https://zz@qq.com:123456@*/example.git
# 需要写成 【注】转义仅仅是在命令行或者是代码中需要。如果使用的是工具的话可以不用转义,工具会帮我们进行转义。
git clone https://zz%40qq.com:123456@*/example.git
原因:
<?php
$userame='zz@qq.com';
echo urlencode($userame);
?>
zz%40qq.com

概述

Git命令使用

[root@master ~]# git clone -h
用法:git clone [选项] [--] <版本库> [<路径>]
    -v, --verbose         更加详细
    -q, --quiet           更加安静
    --progress            强制显示进度报告
    -n, --no-checkout     不创建一个检出
    --bare                创建一个裸版本库
    --mirror              创建一个镜像版本库(也是裸版本库)
    -l, --local           从本地版本库克隆
    --no-hardlinks        不使用本地硬链接,始终复制
    -s, --shared          设置为共享版本库
    --recursive           在克隆时初始化子模组
    --recurse-submodules  在克隆时初始化子模组
    --template <模板目录>
                          模板目录将被使用
    --reference <版本库>  引用版本库
    -o, --origin <名称>   使用<名称>而不是 'origin' 去跟踪上游
    -b, --branch <分支>   检出<分支>而不是远程HEAD
    -u, --upload-pack <路径>
                          远程 git-upload-pack 路径
    --depth <深度>        创建一个指定深度的浅克隆
    --single-branch       只克隆一个分支、HEAD 或 --branch
    --separate-git-dir <git目录>
                          git目录和工作区分离
    -c, --config <key=value>
                          在新版本库中设置配置信息

描述

将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(使用git branch --remotes可见),并创建、签出从克隆存储库当前活动的分支派生的初始分支。

克隆后,不带参数的普通git提取将更新所有远程跟踪分支,不带参数的git提取将另外将远程主分支合并到当前主分支(如果有的话)(当给定--single-branch时这是不真实的);

通过在 refs/remotes/origin 下创建对远程分支头的引用,并通过初始化 remote.origin.url 和 remote.origin.fetch 配置变量来创建此默认配置。

选项

-l

–local

当要从中进行克隆的存储库位于本地计算机上时,此标志会绕过常规的“Git感知”传输机制,并通过为 HEAD 以及对象和引用目录内的所有内容创建副本以克隆存储库。尽可能将 .git/objects/目录下的文件进行硬链接以节省空间。
如果将存储库指定为本地路径(例如/path/to/repo), --local 参数实质上是不起作用的。如果将存储库指定为 URL,则忽略此标志(不使用本地优化)。指定 --no-local 将在给定 /path/to/repo 时覆盖默认值,而使用常规 Git 传输方式。

–no-hardlinks

从本地文件系统上的存储库进行克隆时,强制复制 .git/objects 目录下的文件,而不使用硬链接。如果您要备份存储库,则可能需要这样做。

-s

–shared

当要克隆的存储库位于本地计算机上时,不使用硬链接,而是自动设置 .git/objects/info/alternates 与源存储库共享对象。生成的存储库开始时没有其自己的任何对象。

注意:这可能是危险的操作;不要使用除非您了解它的功能。 如果您克隆您的存储库时使用此选项, 然后在源存储库中删除分支 (或使用任何其他使现有提交解除引用的 Git 命令), 某些对象可能会变得未引用(或悬空)。 这些对象可以通过常规的 Git 操作(例如 git commit)删除。 它会自动调用 git gc --auto。 如果这些对象已删除并被克隆的存储库引用, 那么克隆的存储库将损坏。

请注意,在使用 --shared 选项克隆的存储库中运行不带 --local 选项的 git repack 命令会将源存储库中的对象复制到克隆存储库中的包中,从而消除使用 clone --shared 节省的磁盘空间。不过运行 git-gc 是安全的,它默认使用 --local 选项。

如果要断开用 --shared 克隆的存储库对其源存储库的依赖关系,只需运行 git repack -a 即可将源存储库中的所有对象复制到克隆存储库中的一个包中。

–reference [-if-able] <存储库>

如果参考存储库位于本地计算机上,则自动设置 .git/objects/info/alternates 以从参考存储库获取对象。使用现有的存储库作为备用存储库,则将需要从要克隆的存储库中复制较少的对象,从而降低了网络和本地存储成本。当使用 --reference-if-able 时,不存在的目录会被警告跳过,而不是中止克隆。
注意:请参阅--shared选项的注释,以及 --dissociate选项。

–dissociate

从用 --reference 选项指定的参考存储库中借用对象仅是为了减少网络传输,并在克隆后通过制作借用对象的必要本地副本来停止从对象借用。当从已经从另一个存储库借用对象的存储库进行本地克隆时,也可以使用此选项:新存储库将从同一个存储库借用对象,并且该选项可用于停止借用。

-q

–quiet
悄悄操作。进度不会报告给标准错误流。

-v

–verbose

冗余运行。不影响向标准错误流报告进度状态。

–progress

默认情况下附加到终端时,会将进度状态报告给标准错误流,除非指定了 --quiet 选项。即使标准错误流未定向到终端,该标志也会强制显示进度状态。

–server-option=<option>

使用协议版本2进行通信时,将给定的字符串传输到服务器。给定的字符串不得包含NUL或LF字符。服务器对服务器选项(包括未知选项)的处理是取决于服务器。当给出多个--server-option = <option>时,它们都按照命令行中列出的顺序发送到另一端。

-n

–no-checkout

克隆完成后,不执行磁头签出。

–bare

创建一个空的Git存储库。也就是说不是创建<目录>并将管理文件放在<目录>/中。git使<目录>本身成为$GIT_DIR。这显然意味着不签出,因为没有地方可以签出工作树。此外远程的分支头被直接复制到相应的本地分支头,而不将它们映射到refs/remotes/origin/使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。

–sparse

初始化稀疏检出文件,以便工作目录仅从存储库根目录中的文件开始。可以修改稀疏签出文件以根据需要扩展工作目录。

–filter=<过滤器定义>

使用部分克隆功能,并请求服务器根据给定的对象过滤器发送可访问对象的子集。使用 --filter时,提供的< filter-spec >用于部分克隆过滤器。例如, --filter=blob:none将过滤掉所有blob(文件内容)直到Git需要为止。此外 --filter=blob:limit=将过滤掉所有大小至少为< size >的blob。

–mirror

设置源存储库的镜像。这意味着裸露。与 --bare 相比, --mirror不仅将源的本地分支映射到目标的本地分支,还映射所有的引用(包括远程跟踪分支、注释)并设置一个refspec配置,这样所有这些ref都会被目标存储库中的git远程更新覆盖。

-o <名称>

–origin <名称>

不使用远程名称 origin 来跟踪上游存储库,而使用<名称>

-b <名称>

–branch <名称>

不将新创建的 HEAD 指向克隆存储库的 HEAD 所指向的分支,而是指向<名称>分支。在非裸仓库中,这是将被检出的分支。 --branch 也可以使用标签并在生成的存储库中的提交时分离 HEAD。

-u <上传包>

–upload-pack

如果指定了要克隆的存储库,且可以通过 ssh 访问该存储库,这将为另一端运行的命令指定非默认路径。

–template = <模板目录>

指定将使用模板的目录;

-c <键> = <值>

–config <键> = <值>

在新创建的存储库中设置一个配置变量;这将在存储库初始化后立即生效,但在获取远程历史记录或签出任何文件之前生效。该密钥的格式与git-config所预期的格式相同(例如core.eol=true)。如果同一个键有多个值,每个值都将被写入配置文件。例如这使得向源遥控器添加额外的fetch refspecs变得安全
由于当前实现方式的限制,某些配置变量要等到初始获取和签出后才能生效。已知不会生效的配置变量有:remote.<s名称> .mirror remote.<名称> .tagOpt。如要修改应改用相应的 --mirror 和 --no-tags 选项。

–depth <深度>

创建一个历史记录被截断为指定提交次数的“浅”克隆。暗含 --single-branch 选项,除非给出 --no-single-branch 来获取所有分支顶端附近的历史记录。如果要浅层克隆子模块,还可以使用 --shallow-submodules 选项。

–shallow-since=< date >

创建浅克隆,只包含指定的时间之后的历史记录。

–shallow-exclude=

创建一个有历史的浅克隆,不包含可以被指定远程分支或标签访问的提交。本选项可以使用多次。

–[no-]single-branch

仅克隆直到单一分支末尾的历史,该分支被 --branch 选项或主分支远程 HEAD 指定。被创建仓库之后的抓取将只更新在克隆时被指定的远程跟踪分支。如果在 --single-branch 克隆时,远程 HEAD 未指向任何分支,则不会创建远程跟踪分支。

–no-tags

不克隆任何标签,并在配置中设置 remote.<remote>.tagOpt=--no-tags ,确保将来的git pullgit fetch操作不会跟随任何标签。随后的显式标签抓取仍将起作用。
可以与 --single-branch 结合使用,以克隆和维护除单个克隆分支外没有其他引用的分支。这在例如维护某些仓库的默认分支的最小克隆以进行搜索索引时有用。

–recurse-submodules [=< pathspec >]

创建克隆后,根据提供的路径规范初始化并克隆其中的子模块。如果未提供路径规范,则将初始化并克隆所有子模块。对于由多个条目组成的路径规范,可以多次赋予此选项。生成的克隆将把 submodule.active 设为提供的路径规范。如果未提供路径规范,生成的克隆将把 submodule.active 设为 “.” (表示所有子模块)。

子模块使用其默认设置进行初始化和克隆。这等效于克隆完成后立即运行 git submodule update --init --recursive <路径规范>。如果克隆的仓库没有工作区/检出(即给出了 --no-checkout/-n,–bare 或 --mirror中的任何一个选项)则忽略此选项。

–[no-]shallow-submodules

所有克隆的子模块都将是浅克隆,深度为1。

–[no-]remote-submodules

克隆的所有子模块将使用子模块的远程跟踪分支的状态来更新子模块,而不是超级项目的已记录SHA-1。等同于将--remote 传递给 git submodule update。

–separate-git-dir=<git目录>

不将克隆的存储库放置在原处,而是将克隆的存储库放置在指定的目录中,然后在此处建立与文件系统无关的Git符号链接。这可以将Git仓库与工作区分离。

-j < n >

–jobs < n >

同时抓取的子模块数。默认为 submodule.fetchJobs 选项。

<仓库>

要克隆的(可能是远程的)仓库。

<目录>

要克隆到的新目录的名称。如果未明确指定目录,则使用源仓库中的“人性化”部分(对于 /path/to/repo.git 而言为 repo;对于 host.xz:foo/.git 而言为 foo)。仅当目录为空时才允许克隆到现有目录。

GIT URLS

通常 URL 包含有关传输协议,远程服务器的地址以及存储库路径的信息。对于某些传输协议,一些信息可能会缺失。
Git 支持 ssh,git,http 和 https 协议(此外可以使用 ftp 和 ftps 进行抓取,但这效率低下且不建议使用;请勿使用)。
本地传输(即 git://URL)不进行身份验证,在不安全网络上应谨慎使用。

格式

ssh://[user@]host.xz[:port]/path/to/repo.git/
git://host.xz[:port]/path/to/repo.git/
http[s]://host.xz[:port]/path/to/repo.git/
ftp[s]://host.xz[:port]/path/to/repo.git/

ssh 协议也可以使用类似 scp 的语法:

[user@]host.xz:path/to/repo.git/

仅当第一个冒号之前没有斜杠时才能识别此语法。这有助于区分包含冒号的本地路径。例如可以将本地路径 foo:bar 指定为绝对路径,或者将 ./foo:bar 指定为绝对路径,以避免被误识别为 ssh url。
ssh 和 git 协议还支持 ~username 扩展:

ssh://[user@]host.xz[:port]/~[user]/path/to/repo.git/
git://host.xz[:port]/~[user]/path/to/repo.git/
[user@]host.xz:/~[user]/path/to/repo.git/

对于本地存储库(Git 本身也支持),可以使用以下语法:

/path/to/repo.git/
file:///path/to/repo.git/

这两种语法几乎是等效的,除了前者暗含 --local 选项。git clone,git fetch 和 git pull,但不包括 git push,也将接受合适的捆绑文件。
当 Git 不知道如何处理某种传输协议时,它会尝试使用 remote- <传输方式> 远程帮助程序(如果存在)。要显式请求远程帮助程序,可以使用以下语法:

<传输方式>::<地址>

其中 <地址> 可以是路径,服务器与路径,也可以是可被调用的特定远程帮助程序识别的类似于 URL 的任意字符串。
如果存在大量类似名称的远程存储库,并且您要为其使用不同的格式(这样您使用的 URL 将被重写为有效的 URL),则可以创建以下形式的配置:

[url "<actual url base>"]
		insteadOf = <other url base>

例如有如下:

[url "git://git.host.xz/"]
		insteadOf = host.xz:/path/to/
		insteadOf = work:

URL 诸如 “work:repo.git” 或 “host.xz:/path/to/repo.git” 会在任何 URL 类似于 git://git.host.xz/repo 的上下文中重写。
如果要重写仅用于推送的 URL,可以创建表单的配置部分:

[url "<actual url base>"]
		pushInsteadOf = <other url base>

例如,有如下:

[url "ssh://example.org/"]
	pushInsteadOf = git://example.org/

类似于 git://example.org/path/to/repo.git 的 URL 会被重写为 ssh://example.org/path/to/repo.git用于推送。但拉取代码时仍然使用原始的 URL。

实例

从上游克隆:

git clone git://git.kernel.org/pub/scm/.../linux.git my-linux
cd my-linux
make

制作一个从当前目录借用的本地克隆,而无需进行检出:

git clone -l -s -n . ../copy
cd ../copy
git show-branch

从上游克隆时借用本地目录:

git clone --reference /git/linux.git \
	git://git.kernel.org/pub/scm/.../linux.git \
	my-linux
cd my-linux

创建一个裸仓库,以将您的更改发布给公众:

git clone --bare -l /home/proj/.git /pub/scm/proj.git

Never deny yourself and believe that you are the best!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐