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

原因

  1. 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

  1. partial-clone.这个功能可以极大改善我们的工程师下载大型仓库的体验. 根据实验我们下载L2的代码时间从2小时30分钟, 减少为45分钟左右. 提升极其巨大.

然而此功能也只能在2.22之后的版本才支持

  1. git-lfs也是一个重要功能. 我们会逐步迁移binary过多的仓库到lfs上. 众所周知git本身并不适合处理binary, 以至于我们的git性能在各方面都大幅下降. 当我们迁移完毕之后, 版本过低的用户将无法下载到正常的文件.

升级repo launcher

原因

  1. 软件部现在很多人使用的repo, 已经是2015年的了, 严重落后. 很多重要feature都未得到更新.比如partial-clone git-lfs, 以及新的push fetch的url分离 等等功能. 我们建议无论你使用的是什么版本的repo启动器, 都统一升级到最新版
  2. git-lfs需要最新版本的launcher的支持, 否则upload将会出现一些问题

升级Python

原因

  1. 新版repo只支持python3.6+的版本. 所以我们需要更新python

FAQ:

  1. repo upload 卡住. 按回车就会报错

升级之前下好的代码,临时解决办法是到这个项目的根目录下, 然后

cd .repo/repo
git fetch --all
git checkout stable
  1. 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)

尝试一下这个方法: https://stackoverflow.com/questions/59838238/importerror-cannot-import-name-gi-from-partially-initialized-module-gi-mo

  1. 我没有外网怎么办? (使用云桌面和黄区的同学)

没有外网, 可以先按照上面提到的命令把repo升级了. 至于git, 如果你们是18.04. 可以下载下面的压缩包, 解压之后运行sudo bash install.sh

如果执行 sudo bash install.sh 失败,先执行 sudo apt-get install -f , 再执行 sudo bash install.sh

点我本地下载

  1. 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

全部评论

img

武牧2022年5月17日

如果git配置了8088的旧端口,需要修改manifest文件,然后sync一下

img

王新鹏2022年5月26日

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

img

夏强明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下)

赞

程洋

img

陈炜炜2022年5月27日

fatal: upload-pack not permitted on this server

fatal: 无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。

-----------------------------------------------------------

repo sync报错,有人知道怎么解决吗?

img

程洋2022年5月27日

@陈炜炜

img

赞

陈炜炜,孙睿阳

img

陈炜炜2022年5月27日

@程洋 确认可行

赞

周晓鹏

img

李树东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 报如上的错,大家知道怎么解么。

尝试了很多种办法了,都不太行

img

程洋2022年6月2日 (编辑过)

@lishudong 这种情况大部分是你的apt源挂了,你可以考虑考虑使用清华源和阿里源

img

王春杰2022年6月2日

有人知道这个怎么解吗?运行完之后报这个错误

sudo apt-add-repository ppa:git-core/ppa -y

img

img

程洋2022年6月2日

@武牧 不要乱改manifest. 你具体是什么问题?

img

武牧2022年6月2日

@程洋 是manifest里面的git地址,使用的是旧地址。

img

程洋2022年6月2日

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

img

李宗恒2022年6月17日

@王春杰 可以试试这个,https://github.com/elementary/os-patches/issues/136

我刚解决。。。

img

Cheng1 Zhao 赵诚2022年8月29日

每次下代码都需要设置下面的命令,有什么办法解决这个问题吗?

git clone -b google “ssh://username_placeholder@git.mioffice.cn:29418/tools/repo

img

石奉兵2022年8月29日

@Cheng1 Zhao 赵诚 为什么使用的google分支呢?默认使用的是stable 分支

img

程洋2022年8月29日

@石奉兵 这个是文档里的升级策略. 我就是这么写的

img

程洋2022年8月29日

@李宗恒 不需要. 为什么会每次下代码都需要? 私聊一下

img

孙鹏飞2023年9月15日

Repo init 报这个错是什么原因?有人知道吗

repo: error: no such option: —git-lfs

img

程洋2023年9月15日

@孙鹏飞 这就是因为你没升级repo lacunher和git. 按照这个文档里做了就没问题了

img

孙鹏飞2023年9月15日

@程洋 可以了,感谢感谢!

大笑

程洋

img

孙鹏飞2023年11月1日

@程洋 洋总,昨天遇到个问题,帮忙看下,repo init时候报这个xml找不到是什么原因?

fatal: manifest ‘mivendor_u_sm8650.xml’ not available

fatal: manifest mivendor_u_sm8650.xml not found

img

查光华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切到阿里了

img

程洋2024年8月5日

@查光华 16.04 我真不建议用了. 我没见过这个报错, 就算我自己亲自上我也只能 google 着来试

但是以我的经验, 大概率你这个解决了还会有其他问题

img

查光华2024年8月5日

@程洋 好吧,我研究下ubuntu怎么升级