背景
在我们拉取 Git repo
时,如果不需要大量的日志记录,只想获取某个分支或者某次提交下的文件状态,可以借助 depth=1
参数实现。
使用
在使用 git clone
时直接携带 depth
:
1 | *# 实现默认分支的拉取* |
其中 depth
指定的是 commit
的深度,指定 1
则表示只拉取一次 commit
,就是某次提交的完整状态。如果指定 2
,就表示只想更深一层的 commit
。
此处借助 vue
仓库作为参考:
默认状态
默认拉取主分支:
1 | git clone --depth **1** https://github.com/vuejs/vue.git |
进入 vue
,查看日志:
1 | git log --all |
只有一次提交:
1 | commit c1740aca77170d0bc5ff7972bd05933ed307321c (grafted, HEAD -> dev, origin/dev, origin/HEAD) |
但实际上其有多次提交,我们还可以针对某次提交进行拉取。
拉取某次提交
实际上此操作与 depth 参数无关,只做案例。
-branch
接受Tag Name
参数,需要对commit
打标签才可以直接操作,如果需要直接使用commit
,可能需要全量拉取后在git checkout
获取。
此处我们尝试使用拉取 v2.6.0
,该分支的 commit id
为 8554831
:
1 | git clone --depth **1** -b v2.6.0 https://github.com/vuejs/vue.git |
获取其他内容
在使用了 git clone --depth 1
拉取仓库的前提下,可以通过 git pull --depth x
或者 git fetch --depth x
可以获取当前提交之前的 x
层日志。
但如果使用 git branch -a
并不能查看到远程的分支,如果我们需要使用到远程的所有分支,或者说获取到某个远程的分支,应该怎么操作呢?
获取全部分支
需要从远程拉取当前分支或提交之前的所有记录,同时还会将远程的分支信息以及标签信息都同步到本地来,以便进行后续操作。
其实该需求就是将单一记录的仓库转换成完整的仓库,git
提供 unshallow
参数用以实现该功能。
1 | git pull --unshallow |
此时将会成远程拉取完整信息,git pull --unshallow
最终的结果与默认使用 git clone
仓库的效果一致。
当然这个过程也会十分漫长。
小结
参数 depth
与 branch
可以用于 git
拉取代码包括但不限于 clone
与 submodule add
操作当中,有时候我们需要定制些其他操作,需要执行获取其他分支或者抓取其他记录,都需要借用 git
相关的参数实现。
然而这些指令不不存在某个文档当中,哪怕你用 man git-clone
都没看见相应的提示。(当然那是文档,不是教程。)
此处做了一部分记录:
1 | *# 转换为完整仓库* |
原始链接:Git 使用 --depth 之后