25.1 浅克隆
克隆一个巨大的仓库(比如一个有多年历史的项目)可能会花费很长时间,或者因为需要传输的数据量过大而失败。如果你不需要完整的提交历史,可以进行浅克隆:
git clone [repo_url] --depth 1
上述命令仅会从远程仓库获取最新的提交。 注意,在浅克隆的仓库中,你可能无法解决合并冲突。通常建议至少克隆出你将要回溯以解决合并冲突所需的提交数量。例如,要获取最后50个提交:
git clone [repo_url] --depth 50
之后,如果需要,可以获取仓库的其余部分:
-
版本≥1.8.3
bash git fetch --unshallow # 等同于 git fetch --depth=2147483647获取仓库的其余部分。
-
版本<1.8.3
bash git fetch --depth=1000 # 获取最后1000个提交
25.2 正常克隆
要下载整个仓库,包括完整的历史记录和所有分支,输入:
git clone <url>
上述示例会将其放置在一个与仓库名称相同的目录中。 要下载仓库并将其保存在特定目录中,输入:
git clone <url> [directory]
更多详情请访问“克隆仓库”。
25.3 克隆特定分支
要克隆仓库中的特定分支,输入--branch <branch name>,放在仓库URL之前:
git clone --branch <branch name> <url> [directory]
使用--branch的简写选项-b,该命令会下载整个仓库并检出<branch name>。 为节省磁盘空间,可以仅克隆到单一分支的历史记录:
git clone --branch <branch_name> --single-branch <url> [directory]
如果不将--single-branch添加到命令中,所有分支的历史记录都会被克隆到[directory]中。这在大型仓库中可能会成为问题。 要稍后取消--single-branch标志并获取仓库的其余部分,使用以下命令:
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
25.4 递归克隆
版本≥1.6.5
git clone <url> --recursive
克隆仓库的同时也会克隆所有子模块。如果子模块本身还包含额外的子模块,Git也会克隆这些子模块。
25.5 使用代理克隆
如果你需要在代理环境下使用git下载文件,仅设置系统范围内的代理服务器可能不够。你还可以尝试以下方法:
git config --global http.proxy http://<proxy-server>:<port>/