【gerrit】Cannot assign user name xxx to account xxx,name already in use

报错

Cannot assign user name xxx to account xxx,name already in use

【gerrit】Cannot assign user name xxx to account xxx,name already in use_第1张图片
gerrit登录报错

原因分析

因为gerrit使用的LDAP方式认证,最近切换了ldap的认证地址,可能导致该账号有个历史记录跟新的同名报了冲突

解决办法

老的方式是进到mysql数据库,更改account_id表的内容,但是2.15版本之后用户的表移到notedb了,所以要用新的方式

首先进到gerrit安装服务器上,然后进到gerrit保存代码的地址(如果不记得可以查看 ~/review_site/etc/gerrit.config文件的[gerrit] basePath字段)

然后找到All-Users.git目录,克隆一份这个库

git clone All-Users.git tmp/All-Users

进入tmp/All-Users目录,切到refs/meta/external-ids (这个是gerrit用来保存类似LDAP方式验证的用户信息的分支)

cd tmp/All-Users
git fetch origin refs/meta/external-ids:refs/meta/external-ids
git checkout refs/meta/external-ids

然后搜索保存了那个无法登录用户名的文件,应该会有2个文件

find . -type f | xargs grep "xxx"

找到之后,可以删掉这两个文件,或者更改这两个文件里面的用户名为其他值,修改之后提交

git add .
git commit -m "update username xxx"
git push origin HEAD:refs/meta/external-ids

最后更新并应用到notedb

git update-ref refs/meta/external-ids $(git rev-parse HEAD)

补充

后来发现该用户登录之后userName是空的,无法ssh拉代码,遂删除其账号分支以及LDAP的用户关联文件

  1. 切到refs/meta/external-ids,删掉存储该用户信息的文件

  2. 删除远程用户分支

#进到All-Users目录,方法同上
#找到该用户的分支
git ls-remote | grep 
#删除该用户的分支
git push origin --delete refs/users/xx/xxxxxx

你可能感兴趣的:(【gerrit】Cannot assign user name xxx to account xxx,name already in use)