Git 仓库迁移历险记

栏目: 编程工具 · 发布时间: 5年前

内容简介:前阵子折腾了一个 Git 仓库迁移,觉得有必要自行马克一下。需求背景:老的版本库在一台 Windows 主机上,用 Gitblit 搭建;我在某云用一台独立主机新搭建了一套 Gitlab,前端由另一台主机部署 Nginx 反向代理。

作者:wiLdGoose 发布时间:2018 年 12 月 17 日 分类:技术 Technology

前阵子折腾了一个 Git 仓库迁移,觉得有必要自行马克一下。

需求背景:老的版本库在一台 Windows 主机上,用 Gitblit 搭建;我在某云用一台独立主机新搭建了一套 Gitlab,前端由另一台主机部署 Nginx 反向代理。

需求内容:将老版本库的所有仓库平滑迁移到新的版本库中。

任务拆解:部署并配置 Gitlab、创建项目仓库、镜像推送、将原先指向到 Gitblit 的域名解析修改到 Gitlab、导入账户,完成。

在一切都顺利进行的时候遇到一个大小为 2G 多的仓库,零碎文件较多,最大的单文件也就几百兆。由于我本地没有这个仓库,于是:

$ git clone https://path.to.git/repo.git

进度到 20% 多的时候,死活就断开了,反复尝试无效:

Cloning into 'repo'...
remote: Counting objects: 27709, done
remote: Finding sources: 100% (27709/27709)
remote: Getting sizes: 100% (16855/16855)
remote: Compressing objects:  23% (69/300)
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

网上找到有人说需要更改一下 Git 客户端的上传限制大小:

$ git config http.postBuffer 524288000

或者直接修改 .gitconfig 文件,修改 [http] 段:

postBuffer = 524288000

好了,依然失败。万般无奈之下找同事 copy 了整个 Git 文件夹到我本地,修改 Git 用户配置文件,git pull,成功。接着修改配置文件到新的版本库地址,然后就是见证奇迹的时刻:

$ git push -u origin --all
Enumerating objects: 27705, done.
Counting objects: 100% (27705/27705), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (12552/12552), done.
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
fatal: The remote end hung up unexpectedly
Writing objects: 100% (27705/27705), 1.97 GiB | 2.17 MiB/s, done.
Total 27705 (delta 12742), reused 27100 (delta 12209)
fatal: The remote end hung up unexpectedly
Everything up-to-date

与 clone 的时候一样,push 到一定程度就断开,反复尝试死活不行。想了半天不得其解,考虑到前端用 Nginx 做了反代,Google 之。有人说:

在服务器上面配置了 Nginx 之后,使用 Git 上传大文件的时候会出现“HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large”。

嗯,好像是找到问题了?于是修改 Nginx 的配置文件 nginx.conf,在 http 段加入:

client_max_body_size 1024m;

原文说 2m 够了,我贪心,直接加到 1024m。重启 Nginx,哈哈……特么的还是失败了。

眼睛盯着别人的仓库 URL 和我的 URL,总觉得哪里不对劲。原来 git@path.to.git/repo.git 走的是 SSH 协议,我的 https://path.to.git/repo.git 走的是 HTTP 协议。

改!一顿操作,改 sshd 端口号,配置 Gitlab 为 SSH 方式,到 Gitlab 后台对项目启用 SSH 方式,再次尝试……激动得眼泪都留下来了,成功。

结论:HTTP 协议不适合于大型项目的仓库,能走 SSH 就走 SSH 吧。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Rust编程之道

Rust编程之道

张汉东 / 电子工业出版社 / 2019-1 / 128

Rust 是一门利用现代化的类型系统,有机地融合了内存管理、所有权语义和混合编程范式的编程语言。它不仅能科学地保证程序的正确性,还能保证内存安全和线程安全。同时,还有能与C/C++语言媲美的性能,以及能和动态语言媲美的开发效率。 《Rust编程之道》并非对语法内容进行简单罗列讲解,而是从四个维度深入全面且通透地介绍了Rust 语言。从设计哲学出发,探索Rust 语言的内在一致性;从源码分析入......一起来看看 《Rust编程之道》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具