【发布时间】:2020-06-26 15:07:20
【问题描述】:
跟进this so-question:如果我有一个浅克隆,如何获取所有较旧的提交以使其成为完整克隆?
【问题讨论】:
-
您考虑标记@sdram 的答案吗?这是正确的。
跟进this so-question:如果我有一个浅克隆,如何获取所有较旧的提交以使其成为完整克隆?
【问题讨论】:
编辑: git fetch --unshallow 现在是一个选项(感谢 Jack O'Connor)。
您可以运行git fetch --depth=1000000(假设存储库的提交少于一百万)。
【讨论】:
git fetch --unshallow 存在(如@sdram 的答案),这个答案不再是最好的。
git fetch --depth=2147483647 是提供给命令的最大可能深度。
git fetch --unshallow,但仍然没有显示所有的分支。
下面的命令 (git version 1.8.3) 将浅克隆转换为普通克隆
git fetch --unshallow
然后,访问所有原点分支(感谢 cmets 中的@Peter)
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
【讨论】:
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin 来自答案应该与手动编辑 .git/config 相同
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' 为我工作
我只需要将 repo 深化到特定的提交。
看了man git-fetch,发现不能指定提交,但是可以指定日期:
git fetch --shallow-since=15/11/2012
对于那些需要增量深化的人,另一个man引用:
--deepen=<depth>类似于--depth,除了它指定的数量 从当前浅边界而不是从尖端提交 每个远程分支的历史记录。
【讨论】:
你可以试试这个:
git fetch --update-shallow
【讨论】:
以上消息都没有起到作用。我正在尝试从浅克隆开始使用 git 标签。
第一次尝试
git fetch --update-shallow
哪种方式工作到一半。 然而,没有可用的标签!
git fetch --depth=1000000
最后一条命令真的提取了标签,我终于可以执行了
git checkout -b master-v1.1.0 tags/v1.1.0
并完成它。
HTH
【讨论】:
实现从浅克隆到深克隆的两种方法。 :
使用以下步骤下载分支:(这会下载分支的浅拷贝,然后将其转换为完整克隆,即带来完整的分支及其历史记录)。
一个。 git clone -b 分支http://git.repository/customSP01.git --depth 1
这会做一个浅层克隆(使用深度选项)只获取一个分支(在您请求的深度)。
b. cd customSP01
c. git fetch -depth=100
d. get fetch -depth=500
....
e. git fetch --unshallow
//上述命令会将浅克隆转换为普通克隆。 然而,这并没有带来所有的分支:
然后,访问所有分支。
f. git remote set-branches origin '*'
[此步骤也可以通过编辑 .git/config 中的以下行来手动完成。
fetch = +refs/heads/master:refs/remotes/origin/master
to(用 * 代替 master):
fetch = +refs/heads/*:refs/remotes/origin/* ]
g. git fetch -v
这会将浅克隆转换为具有所有历史记录和分支详细信息的深度克隆。
如果您使用以下命令代替步骤 a 中的命令,则可以避免步骤 f 和 g。做浅克隆:
git clone -b 分支 --no-single-branch http://git.repository/customSP01.git --depth 1
【讨论】:
git clone --depth=1 <url>,但后来git fetch --unshallow 没有修复它,git fetch --all 也没有修复它:远程分支列表仍然只有 master 和 HEAD。步骤 F 修复了它。