一次从Github向Gitee迁库踩坑记录
先上结论:gitee的lfs功能收费,直接从github迁移包含lfs管理的文件会出错,配置lfs.url即可解决问题
Q: 为什么要迁库呢?
A: github访问太慢了,不然我也不想费这个功夫!
gitee自带的有从github同步仓库的功能,一般来说该功能非常方便。
然而,我们的github库使用了lfs,这就是踩坑的开始。
1.跟往常一样,直接在gitee中一键导入github仓库,一切正常。我还专门新建了一个文本文件测试了一下,上传成功,以为万事大吉了。
2.过了几个小时,一位成员突然给我说clone库的时候出错了,我一脸懵逼,Error downloading object Smudge error: Error downloading这是啥错?我没问题啊!

3.我自己clone了一下,发现报了一样的错误。在网上搜了半天发现貌似是二进制文件下载出了问题,在stackoverflow中找到了答案(在这吐槽一下,百度半小时,谷歌一分钟)
In my case the SSH-authenticated repository was updated to use LFS from another client and on my side Git-LFS didn't know about the SSH remote-url.
What I did to fix it was the following:
Copy the URL configured in remote.origin.url (push URL for origin) to lfs.url (the URL LFS uses):
$ git config lfs.url $(git config remote.origin.url)
(If your remote is not named origin then change to your remote name.)
Then run
$ git config lfs.url
to show the URL and confirm that it does indeed contain an SSH url, and not some HTTP/HTTPS url.
Then you can
$ git pull
Done.
See also: https://github.com/git-lfs/git-lfs/issues/2661#issuecomment-335903332
简单来说就是git找不到lfs文件的位置,我去gitee上一看,果然那些大文件都是not found,然后配置一下lfs.url即可

git config lfs.url https://github.com/xxxxx.git
4.配置完成后,我重新clone了一下,很好,没有报错,二进制文件也下载了。
5.然而我想上传一个大文件时,报了一个更离谱的错误ERROR: Authentication error: Authentication required: Authorization error:
没有权限?我是仓库管理员啊!

查询后发现,这不是git权限报错,而是git lfs没有权限,我这才想起来去看看gitee支不支持lfs,结果如下:

至此,破案了,lfs功能收费,我先发个邮件去问问,后续再更......
不对,该问题是由git lfs功能引起的,在github中也有不少人遇到
$ rm .git/hooks/pre-push
$ git push
可以解决没有授权的问题
感觉目前是这样:lfs是另外的库由github保管,其他没有被lfs track的文件可以上传到gitee,配置lfs.url后大文件还是放在github
不需要gitee的付费功能/hh
一次从Github向Gitee迁库踩坑记录的更多相关文章
- 使用Windows下的git工具往github上传代码 踩坑记录
使用Windows下的git工具往github上传代码 踩坑记录 背景 由于以前接触的项目都是通过svn进行版本控制,现在公司项目使用git,加上自己平时有一个练手小项目,趁着周末试着把项目上传到自己 ...
- 【踩坑记录】记录一次使用Python logging库多进程打印日志的填坑过程
背景: 项目使用Python自带的logging库来打印日志 项目部署在一台Centos7的机器上 项目采用gunicorn多进程部署 过程: 1.LOG日志代码封装: 采用logging库,并设置w ...
- GitHub 小试牛刀(踩坑记录)
首先要在GitHub上创建好远程仓库,把README,LISCENCE,.gitignore三个文件在远程仓库初始化好. 然后在创建本地仓库,先要cd到自己的项目目录下,然后: $ git init ...
- Git Pull Github and Gitee or Gitlab
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html 缩略Code:https://www.cnblogs.com/dotnetcra ...
- Git 迁库 标签
Git迁库 (一)克隆裸库 git clone --bare https://github.com/SunArmy/Tourist.git 克隆之后进入该目录下是这样的 (二)创建新的版本库 这里我已 ...
- git同步代码至github和gitee(码云)
注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/git-to-g ...
- Git使用的一些问题:.gitignore规则不生效、git同步代码至github和gitee
Git忽略规则及.gitignore规则不生效的解决办法 .gitignore 的基本使用 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件 ...
- GitHub 和 Gitee 开源免费 10 个超赞后台管理面板,看完惊呆了!
软件工程师在实际项目开发中不可避免需要依赖一些前后端的后台管理系统框架,而不是从零开始一点点的搭建,浪费人力.目前市面上有很多开放源码.且免费的后台管理面板,样式色彩也比较丰富美观. 今天整理 ...
- 100个Github上Android开源库
项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, ...
随机推荐
- php对字符串的操作2之 处理字符串的内置函数
1,获取字串:substr($str,$start,$length) mb_substr($str,$start,$length,'utf-8'); 更换为utf8编码,能准确的截取中文 <?p ...
- C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置
] {"}; "; //判断字符串的前几位在另一个字符串数组中第一次出现的索引位置 index = Array.IndexOf(s, s1.Substring(, ));
- Flask 教程 第十五章:优化应用结构
本文翻译自The Flask Mega-Tutorial Part XV: A Better Application Structure 这是Flask Mega-Tutorial系列的第十五部分,我 ...
- AcWing 851. spfa求最短路 边权可能为负数。 链表 队列
#include <cstring> #include <iostream> #include <algorithm> #include <queue> ...
- Docker - Docker 镜像 简介
概述 简单介绍一下 docker 镜像的概念 1. 背景 复习 docker 镜像是 docker 最基础, 最重要的概念之一 所以正式使用之前, 最好有所理解和认识 2. 镜像 概述 简单描述 理解 ...
- SSHException: Error reading SSH protocol banner
当我在使用ssh 远程connect 另一台机器的server 时出现了错误,错误如下,起初以为是自己代码写的有问题,后来本地了一下看了跑的没问题,我就开始根据报错去查寻原因, 起初在论坛博客看到这 ...
- TensorFlow 模型的保存与载入
参考学习博客: # https://www.cnblogs.com/felixwang2/p/9190692.html 一.模型保存 # https://www.cnblogs.com/felixwa ...
- super this 关键字
super 关键字的三种用法: 1.在子类成员方法中,访问父类成员变量 2.在子类成员方法中,访问父类成员方法 3.在子类构造方法中,访问父类构造方法 this 关键字的三种用法: 1.在本类的成员方 ...
- YouTube为创作者提供了更多赚钱的途径
编辑 | 于斌 出品 | 于见(mpyujian) 大家提到YouTube可能还有些陌生,只是听说过,但因为一些原因并没有实际应用过,但其实YouTube就是设立在美国的一个视频分享网站,让使用者上载 ...
- call深入理解
function fn1() { console.log(1); } function fn2() { console.log(2); } fn1.call(fn2); // 1 fn1.call.c ...