Gerrit升级提⽰
Gerrit大事记
升级Gerrit之后, 由于很多新feature只在新版的git和repo上得到支持. 已经不兼容过旧的git和repo版本. 所以我们将在5月15日升级完Gerrit之后, 停止对python3.5以下,git版本在2.26.1和repo launcher 2.21以下的支持
届时, repo init和repo sync会在这些老版本的组件上报错.
如何确认是否升级成功
repo version

注意这里repo not installed是一个正常现象, 这表示你当前目录和父目录下没有.repo目录.
一定要注意在你升级完之后把原有的.repo目录(包含父目录下的.repo)全部都删掉.
如何升级?
Ubuntu 17.04, 18.04(含)及以上
Ubuntu 18.04以上已经自带python3.6+的版本. 所以只需要升级git以及repo launcher即可
升级成功之后,输入repo version
确认是否升级成功,显示“python”: 没有那个文件或目录。
在/usr/bin/目录下为python3创建软链即可
sudo ln -s /usr/bin/python3 /usr/bin/python
#升级git
sudo apt-get install software-properties-common #如果你是黄区没有外网, 并且是18.04, 后面FAQ有一个离线的git安装包
sudo apt-add-repository ppa:git-core/ppa -y
sudo apt-get update
sudo apt-get install git
#初始化lfs组件, 为日后迁移lfs兼容
sudo apt-get install git-lfs
#---------------------------------------------------------------------------------
#升级repo launcher
repo_path=`which repo`
u=`stat -c %U $repo_path`
[[ $u = root ]] && USE_ROOT="sudo" #上面三行检查一下你的repo以前安装在哪, 并且需要不需要root
mkdir /tmp/repo-test -p
cd /tmp/repo-test
# username_placeholder 替换成自己的公司邮箱前缀
git clone -b stable "ssh://username_placeholder@git.mioffice.cn:29418/tools/repo"
$USE_ROOT cp repo/repo $repo_path无法更新git,可以手动编译,也很方便:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git https://packagecloud.io/github/git-lfs/install 16.04会报找不到git-lfs,可以使用git-lfs在package cloud的installation instructions.
Ubuntu 16.04(含)及以下
Ubuntu 16.04及以下的机器. 默认是python是3.5以下的, 所以除了18.04需要做的升级之外. 还需要升级python, 以下是我们验证成功的升级方法.
另外你只需要安装了python3.6+就可以, 即使默认还是在使用python2.7也不会有问题. (切了环境就很容易崩掉)
#升级git
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:git-core/ppa -y
sudo apt-get update
sudo apt-get install git
#初始化lfs组件, 为日后迁移lfs兼容
sudo apt-get install git-lfs
#---------------------------------------------------------------------------------
#升级repo launcher
repo_path=`which repo`
u=`stat -c %U $repo_path`
[[ $u = root ]] && USE_ROOT="sudo" #上面三行检查一下你的repo以前安装在哪, 并且需要不需要root
mkdir /tmp/repo-test -p
cd /tmp/repo-test
# username_placeholder 替换成自己的公司邮箱前缀
git clone -b google "ssh://username_placeholder@git.mioffice.cn:29418/tools/repo"
$USE_ROOT cp repo/repo $repo_path
#---------------------------------------------------------------------------------
#升级python
sudo add-apt-repository -y ppa:jblgf0/python
sudo apt-get update
sudo apt-get install python3.6但是请务必注意, 升级python有可能造成系统组件的紊乱.而且在我们实验的过程中, 发现很多官方都已经宣布不支持16.04以下的版本的, 比如很多apt源以及packages. 同时, 我们规划中的Gerrit提速计划中, 16.04以及以下的OS会遇到越来越多的麻烦.所以我们这里强烈建议还在使用16.04的朋友尽快升级到20.04以上的版本
这些组件升级了之后有哪些好处?
升级git
原因
- git的fetch协议, 已经有了更有效率的
protocol v2. 这个协议在git fetch最开始的refs advertised阶段的提升尤为明显.尤其对于platform/frameworks/base这种动辄40万refs的大仓库
从git 2.18开始, git支持protocol V2,从2.26开始, git默认使用protocol V2
然而Ubuntu 18.04最高只能下载到2.17的git. 所以实际上, 几乎80%的研发使用的git版本过老
Git进阶 这篇文档详细解释了protocol V1. 有兴趣的朋友可以和官方文档对照着一起看, 了解其中的原因 Git protocol V2
partial-clone.这个功能可以极大改善我们的工程师下载大型仓库的体验. 根据实验我们下载L2的代码时间从2小时30分钟, 减少为45分钟左右. 提升极其巨大.
然而此功能也只能在2.22之后的版本才支持
git-lfs也是一个重要功能. 我们会逐步迁移binary过多的仓库到lfs上. 众所周知git本身并不适合处理binary, 以至于我们的git性能在各方面都大幅下降. 当我们迁移完毕之后, 版本过低的用户将无法下载到正常的文件.
升级repo launcher
原因
- 软件部现在很多人使用的repo, 已经是2015年的了, 严重落后. 很多重要feature都未得到更新.比如
partial-clonegit-lfs, 以及新的push fetch的url分离 等等功能. 我们建议无论你使用的是什么版本的repo启动器, 都统一升级到最新版 git-lfs需要最新版本的launcher的支持, 否则upload将会出现一些问题
升级Python
原因
- 新版repo只支持python3.6+的版本. 所以我们需要更新python
FAQ:
-
repo upload 卡住. 按回车就会报错

升级之前下好的代码,临时解决办法是到这个项目的根目录下, 然后
cd .repo/repo
git fetch --all
git checkout stable-
cannot import name ‘_gi’
Traceback (most recent call last):
File "/usr/bin/apt-add-repository", line 12, in <module>
from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 67, in <module>
from gi.repository import Gio
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
from . import _gi
ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)-
我没有外网怎么办? (使用云桌面和黄区的同学)
没有外网, 可以先按照上面提到的命令把repo升级了. 至于git, 如果你们是18.04. 可以下载下面的压缩包, 解压之后运行sudo bash install.sh
如果执行 sudo bash install.sh 失败,先执行 sudo apt-get install -f , 再执行 sudo bash install.sh
-
repo: error: no such option: --clone-filter错误
clone一份repo仓库,然后使用里面的repo工具作为入口
# username_placeholder 替换成自己的公司邮箱前缀
git clone ssh://username_placeholder@git.mioffice.cn:29418/tools/repo -b stable全部评论

武牧2022年5月17日
如果git配置了8088的旧端口,需要修改manifest文件,然后sync一下

王新鹏2022年5月26日
Ubuntu 18.04升级git时遇到了提示执行”apt —fix-broken install”的问题,可参考下面链接解决https://blog.csdn.net/zhouzhiyao960211/article/details/89716036

夏强明2022年5月27日 (编辑过)
碰到以下错误:
File “/usr/bin/py3clean”, line 33, in from debpython import files as dpf File “/usr/share/python3/debpython/files.py”, line 1SyntaxError: Non-ASCII character ‘\xc2’ in file /usr/share/python3/debpython/files.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
解决的办法:
sudo rm /usr/bin/python3; sudo ln -s /usr/bin/python3.6 /usr/bin/python3 (根据自己的python版本链接到python3下)
程洋

陈炜炜2022年5月27日
fatal: upload-pack not permitted on this server
fatal: 无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。
-----------------------------------------------------------
repo sync报错,有人知道怎么解决吗?

程洋2022年5月27日
@陈炜炜
陈炜炜,孙睿阳

陈炜炜2022年5月27日
@程洋 确认可行
周晓鹏

李树东2022年5月29日
下列软件包有未满足的依赖关系:
git : 依赖: libc6 (>= 2.34) 但是 2.27-3ubuntu1.6 正要被安装
依赖: libpcre2-8-0 (>= 10.34) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
ubuntu 16.04 执行sudo apt-get install git 报如上的错,大家知道怎么解么。
尝试了很多种办法了,都不太行

程洋2022年6月2日 (编辑过)
@lishudong 这种情况大部分是你的apt源挂了,你可以考虑考虑使用清华源和阿里源

王春杰2022年6月2日
有人知道这个怎么解吗?运行完之后报这个错误
sudo apt-add-repository ppa:git-core/ppa -y

程洋2022年6月2日
@武牧 不要乱改manifest. 你具体是什么问题?

武牧2022年6月2日
@程洋 是manifest里面的git地址,使用的是旧地址。

程洋2022年6月2日
哪一个?私聊下我们改改,8088应该和这次升级没关系,8088这个域名我们可能4年前就废弃了

李宗恒2022年6月17日
@王春杰 可以试试这个,https://github.com/elementary/os-patches/issues/136
我刚解决。。。

Cheng1 Zhao 赵诚2022年8月29日
每次下代码都需要设置下面的命令,有什么办法解决这个问题吗?
git clone -b google “ssh://username_placeholder@git.mioffice.cn:29418/tools/repo”

石奉兵2022年8月29日
@Cheng1 Zhao 赵诚 为什么使用的google分支呢?默认使用的是stable 分支

程洋2022年8月29日
@石奉兵 这个是文档里的升级策略. 我就是这么写的

程洋2022年8月29日
@李宗恒 不需要. 为什么会每次下代码都需要? 私聊一下

孙鹏飞2023年9月15日
Repo init 报这个错是什么原因?有人知道吗
repo: error: no such option: —git-lfs

程洋2023年9月15日
@孙鹏飞 这就是因为你没升级repo lacunher和git. 按照这个文档里做了就没问题了

孙鹏飞2023年9月15日
@程洋 可以了,感谢感谢!
程洋

孙鹏飞2023年11月1日
@程洋 洋总,昨天遇到个问题,帮忙看下,repo init时候报这个xml找不到是什么原因?
fatal: manifest ‘mivendor_u_sm8650.xml’ not available
fatal: manifest mivendor_u_sm8650.xml not found

查光华2024年8月5日 (编辑过)
The following packages have unmet dependencies:
git : Depends: libcurl3-gnutls (>= 7.56.1) but 7.47.0-1ubuntu2.19 is to be installed
Depends: libpcre2-8-0 (>= 10.31) but 10.21-1 is to be installed
E: Unable to correct problems, you have held broken packages.
ubuntu 16.04 装sudo apt-get install git的时候报错要怎么搞,apt source切到阿里了

程洋2024年8月5日
@查光华 16.04 我真不建议用了. 我没见过这个报错, 就算我自己亲自上我也只能 google 着来试
但是以我的经验, 大概率你这个解决了还会有其他问题

查光华2024年8月5日
@程洋 好吧,我研究下ubuntu怎么升级