【发布时间】:2020-12-05 07:53:26
【问题描述】:
我正在将一个大文件推送到 git,但连接速度很慢。终止此推送(中推)并在我有更好的连接时恢复它的最安全方法是什么?
【问题讨论】:
标签: git
我正在将一个大文件推送到 git,但连接速度很慢。终止此推送(中推)并在我有更好的连接时恢复它的最安全方法是什么?
【问题讨论】:
标签: git
杀死客户端(Ctrl+C 或任何其他方法)不会导致服务器上的数据损坏,如果这就是您所说的“安全”的话。在所有 blob 都成功传输之前,服务器不会更新任何内容,然后它会更新 refs 以指向新的 blob。
Git 没有任何工具可以恢复中断的传输,因此当您的连接速度更快时,您可能不得不再次传输大 blob。
【讨论】:
我相信git push 是原子的,这意味着如果你只是 Ctrl-C 退出操作,远程存储库将处于推送之前的原始状态。这也意味着,当您再次推送时,它将从头开始。但这听起来并不一定是你的问题。
【讨论】:
在 Git 2.30(2021 年第一季度)之前,被杀死的“git push”(man) 可能会留下一个打包对象进程,仍在计算以找到一个好的压缩,浪费周期.
这已得到纠正,并说明杀死正在进行的推送是多么安全。
参见 Jeff King (peff) 的 commit 8b59935(2020 年 11 月 20 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit adae5df,2020 年 12 月 3 日)
send-pack: 在信号或退出时杀死 pack-objects 助手签字人:杰夫·金
我们生成了一个外部打包对象进程来实际将对象发送到远程端。
如果我们在这个过程中被信号杀死,pack-objects 会继续运行并完成推送,这可能会让用户感到惊讶。我们下去的时候应该把它拿下来。
【讨论】: