报错
Cannot assign user name xxx to account xxx,name already in use
原因分析
因为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的用户关联文件
-
切到refs/meta/external-ids,删掉存储该用户信息的文件
-
删除远程用户分支
#进到All-Users目录,方法同上
#找到该用户的分支
git ls-remote | grep <USER_ID>
#删除该用户的分支
git push origin --delete refs/users/xx/xxxxxx
网友评论