简体   繁体   English

为什么 git 浅克隆可以有更多的提交<depth> ?

[英]Why git shallow clone can have more commits than <depth>?

git clone --depth <depth> <url> <repo>; git -C <repo> rev-list --count --all git clone --depth <depth> <url> <repo>; git -C <repo> rev-list --count --all != <depth> git clone --depth <depth> <url> <repo>; git -C <repo> rev-list --count --all != <depth>

git clone --depth <depth> : Create a clone with a history truncated to <depth> commits . git clone --depth <depth> :创建一个历史记录被截断为<depth> commits的克隆。 Implies --single-branch .暗示--single-branch

Eg url = https://github.com/vhf/free-programming-books.git , depth = 10, but commit_count = 15例如 url = https://github.com/vhf/free-programming-books.git ,depth = 10,但 commit_count = 15

git version 2.9.0 git version 2.9.0

The shallow version of the repository includes all commits within the specified distance from the branch head when following all possible parents rather than only the first one.当跟随所有可能的父级而不是仅第一个时,存储库的浅版本包括距分支头指定距离内的所有提交。 Therefore, for a non-linear history with merges, the count of commits will not be equal to depth.因此,对于具有合并的非线性历史记录,提交计数将不等于深度。

$ git clone --depth 10 https://github.com/vhf/free-programming-books.git
Cloning into 'free-programming-books'...
remote: Counting objects: 85, done.
remote: Compressing objects: 100% (63/63), done.
remote: Total 85 (delta 31), reused 46 (delta 22), pack-reused 0
Unpacking objects: 100% (85/85), done.
Checking connectivity... done.

$ git -C free-programming-books/ rev-list --count HEAD
15

$ git -C free-programming-books/ log --graph --oneline --decorate
* b9ffc8e (HEAD -> master, origin/master, origin/HEAD) Adding pt_BR C book used by ...
* 824c1d3 Replaced Google Python style guide dead-link with new one (#1987)
* 3c32612 Added Laravel: Code Smart online book (#1986)
* eabce2c Fixed typo: Structure and Interpretation (#1985)
* aab83e5 Added IRPF90 gitbook to Misc section (#1984)
* 6f72509 Added a bash tutorial in free-courses-en.md (#1983)
*   9b95b09 Merge branch 'pr/1980'
|\  
| * 2811cd3 Fix blank lines
| * bbe9bd6 Adds 2 golang podcasts (and fixes missing #ggulp)
| * fdeabc6 (grafted) Fix ordering
*   da317ad Merge branch 'pr/1976'
|\  
| * 20b940a Fix ordering
| * 9a6ee0b (grafted) Add openHPI to list of MOOCs
* 43294d1 Update link Rust by Example #1970 (#1995)
* d758a93 (grafted) Fix a broken link to 'Practical PostgreSQL' (#1994)

The pseudo-root commits in this truncated history are d758a93 , 9a6ee0b , and fdeabc6 .此截断历史记录中的伪根提交是d758a939a6ee0bfdeabc6 All of them are 9th generation ancestors of the head commit.他们都是头目提交的第9代祖先。


Original answer (before the MVCE was provided)原始答案(在提供 MVCE 之前)

This may be the case with local clones when <url> doesn't start with file:// .<url>不以file://开头时,本地克隆可能就是这种情况。 Then git outputs a corresponding warning:然后git输出相应的警告:

warning: --depth is ignored in local clones; use file:// instead.

For local clones git simply creates hardlinks to objects in the source repository (unless the --no-hardlinks switch is specified, but the latter still doesn't make local clones respect the --depth option).对于本地克隆,git 只是创建指向源存储库中对象的硬链接(除非指定了--no-hardlinks开关,但后者仍然不会使本地克隆尊重--depth选项)。 Cloning via hardlinking allows to save disk-space and is very fast compared to copying all objects.通过硬链接进行克隆可以节省磁盘空间,并且与复制所有对象相比速度非常快。 Since the purpose of the --depth option is to reduce the data transfer, it doesn't make much sense for local clones and is therefore ignored.由于--depth选项的目的是减少数据传输,它对本地克隆没有多大意义,因此被忽略。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM