我在Ubuntu服务器上安装了我的Gerrit。正如Gerrit所说:第一个登录gerrit的人是管理员。所以我先用openID(谷歌帐户)登录,我确实是管理员。但是,当第二天我重新登录我的谷歌帐户,我成为一个新的注册。ID是100001(管理员的ID是100000),但两个电子邮件是谷歌的电子邮件,是相同的。发生什么事了?
vulvrdjw1#
最简单的方法是暂时禁用经过身份验证的登录。编辑gerrit.config中的[auth]语句,如下所示:
[auth] type = development_become_any_account
然后以管理员身份强制登录,授予自己访问权限,然后恢复[auth]配置。请记住,在此期间访问您的服务器的任何人也可以是任何帐户,因此在完成上述步骤时,请设置防火墙或其他东西以将访问范围缩小到您的工作站。
yqlxgs2m2#
gerrit自动分配第一个登录作为管理员,并把你的谷歌帐户作为另一个ID。您可以1.使用openid登录并将google帐户id添加到管理员组中1.手动更改数据库system_config为您的谷歌帐户.请参阅https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/access-control.html#administrators希望能给点提示。
system_config
sigwle7e3#
我也遇到了类似的问题,发现Shawn皮尔斯在邮件列表上的回复很有用:https://groups.google.com/d/msg/repo-discuss/FkIPsL28OXM/OBJvKaMh-wgJHTH、
c6ubokkw4#
所以这有点麻烦,但是因为Gerrit将其Group数据存储在git repo中,尽管是unconventional refs,您可以使用git plumbing命令手动更新它。我希望你对git plumbing感到舒服!这对我来说很有效,使用Docker的Gerrit 3.8.1。我将Gerrit git卷挂载到另一个包含Git的容器中。1.关闭Gerrit。(它似乎刷新了其内部组数据库,否则,重复以前的更改)1.在All-Users.git存储库中找到您的Administrators组:1.用git for-each-ref refs/groups列出每个组引用。这将给予你一个输出:f582a7915e6d86c8167840da789aa719e65074ee commit \ refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5(1)468c8af86d67d808caa28c23f30ea76c417b9815 commit \ refs/groups/dd/dd0f7b0c5b8f949c4957c48dfdf0c5c4de5d84eb1.每行的第一个字段是提交散列。组提交有一个group.config和一个members文件。检查group.config文件,看看它是否是Administrators组:git show f582a7915e6d86c8167840da789aa719e65074ee:group.config初始Admin组的输出应类似于以下内容:
git
All-Users.git
git for-each-ref refs/groups
f582a7915e6d86c8167840da789aa719e65074ee commit \ refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5
468c8af86d67d808caa28c23f30ea76c417b9815 commit \ refs/groups/dd/dd0f7b0c5b8f949c4957c48dfdf0c5c4de5d84eb
group.config
members
git show f582a7915e6d86c8167840da789aa719e65074ee:group.config
[group] id = 1 name = Administrators description = Gerrit Site Administrators ownerGroupUuid = aaea352bb556868bc6027957d670939b66a953b5 visibleToAll = false
1.太棒了!所以我们已经确定git ref refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5(2)是Administrators组,最新提交为f582a7915e(1)。我们以后会记住这些的。1.现在,我们将创建一个新提交并将其添加到ref中,这是一种困难的方法。1.我们将创建一个包含用户的新members文件。我的Gerrit用户是100001,所以:echo -e '100000\n100001' > members1.基于此文件创建一个新的git blob(使用-w将其提交到git的存储)git hash-object -w members这将回显新创建的blob的SHA1。记下来以后用。在我的例子中,它是3e8cd349203821044ce4a90835b034ff09916b08(3)(you现在可以删除members文件)1.现在我们需要创建一个新的git tree,它符合Gerrit的组组织。回想一下我们之前发现的提交对象1ff7dc0b5。让我们来看看它的树:git ls-tree 1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56这将输出类似于:100644 blob 0daf37cff123b35c933c86e314af03130ea984b5 group.config100644 blob 3e8cd349203821044ce4a90835b034ff09916b08 members因此,我们要创建一个新树,但其中的members文件是我们刚刚创建的文件。1.我们将保留与上一个树(0daf37c)中相同的group.config:git update-index --add --cacheinfo 100644 0daf37cff123b35c933c86e314af03130ea984b5 group.config1.从blob 3e8cd34添加新的members(3):git update-index --add --cacheinfo 100644 3e8cd349203821044ce4a90835b034ff09916b08 members1.然后从我们的索引中创建一个新的树:git write-tree这将回显树的SHA1,我们将在稍后保留:270bfac6c2c68e24979968083631d97c663e942e(4)1.现在我们要用新创建的树创建一个新的提交对象。1.要创建提交,Git需要我们的用户信息,它不能从我的容器中推断出来,所以:git config --global user.email " [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) "git config --global user.name "John de Largentaye"1.然后使用前面的树270bfac(4)以及组的最后一次提交f582a7915e(1)创建一个新的提交对象。我们可以通过多个-m参数以段落块的形式传递提交消息,或者直接在shell中使用^D(Ctrl-D)退出:$ git commit-tree 270bfac6c2c68e24979968083631d97c663e942e -p f582a7915e6d86c8167840da789aa719e65074ee
refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5
f582a7915e
echo -e '100000\n100001' > members
-w
git hash-object -w members
3e8cd349203821044ce4a90835b034ff09916b08
git tree
1ff7dc0b5
git ls-tree 1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56
100644 blob 0daf37cff123b35c933c86e314af03130ea984b5 group.config
100644 blob 3e8cd349203821044ce4a90835b034ff09916b08 members
0daf37c
git update-index --add --cacheinfo 100644 0daf37cff123b35c933c86e314af03130ea984b5 group.config
3e8cd34
git update-index --add --cacheinfo 100644 3e8cd349203821044ce4a90835b034ff09916b08 members
git write-tree
270bfac6c2c68e24979968083631d97c663e942e
git config --global user.email " [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) "
git config --global user.name "John de Largentaye"
270bfac
-m
^D
Ctrl-D
$ git commit-tree 270bfac6c2c68e24979968083631d97c663e942e -p f582a7915e6d86c8167840da789aa719e65074ee
Update the Administrators group the hard way to add user <me> Gee this was "fun" ^D
这将回显新创建的提交对象的SHA。在我的情况下:1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56(5)1.最后,更新Gerrit组ref refs/groups/aa/aaea35(2)以指向我们的新提交1ff7dc(5)。我们将引用之前的提交哈希f582a79(1),以允许git复查我们的工作,确保更新的ref正确:
1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56
refs/groups/aa/aaea35
1ff7dc
f582a79
git update-ref \ refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5 \ 1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56 \ f582a7915e6d86c8167840da789aa719e65074ee
1.重新启动Gerrit,以您的用户身份登录,然后转到“组”,看看您现在是否可以看到并编辑Administrators组!
a6b3iqyw5#
如果您知道管理员用户是谁,并且您使用LDAP身份验证,则可以让LDAP管理员在LDAP中更改该特定用户的密码,给予它一些时间进行复制,然后您应该能够以该用户身份登录并将自己添加到Administrators组。
5条答案
按热度按时间vulvrdjw1#
最简单的方法是暂时禁用经过身份验证的登录。
编辑gerrit.config中的[auth]语句,如下所示:
然后以管理员身份强制登录,授予自己访问权限,然后恢复[auth]配置。
请记住,在此期间访问您的服务器的任何人也可以是任何帐户,因此在完成上述步骤时,请设置防火墙或其他东西以将访问范围缩小到您的工作站。
yqlxgs2m2#
gerrit自动分配第一个登录作为管理员,并把你的谷歌帐户作为另一个ID。
您可以
1.使用openid登录并将google帐户id添加到管理员组中
1.手动更改数据库
system_config
为您的谷歌帐户.请参阅https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/access-control.html#administrators
希望能给点提示。
sigwle7e3#
我也遇到了类似的问题,发现Shawn皮尔斯在邮件列表上的回复很有用:
https://groups.google.com/d/msg/repo-discuss/FkIPsL28OXM/OBJvKaMh-wgJ
HTH、
c6ubokkw4#
所以这有点麻烦,但是因为Gerrit将其Group数据存储在git repo中,尽管是unconventional refs,您可以使用git plumbing命令手动更新它。
我希望你对git plumbing感到舒服!
这对我来说很有效,使用Docker的Gerrit 3.8.1。我将Gerrit
git
卷挂载到另一个包含Git的容器中。1.关闭Gerrit。(它似乎刷新了其内部组数据库,否则,重复以前的更改)
1.在
All-Users.git
存储库中找到您的Administrators组:1.用
git for-each-ref refs/groups
列出每个组引用。这将给予你一个输出:f582a7915e6d86c8167840da789aa719e65074ee commit \ refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5
(1)468c8af86d67d808caa28c23f30ea76c417b9815 commit \ refs/groups/dd/dd0f7b0c5b8f949c4957c48dfdf0c5c4de5d84eb
1.每行的第一个字段是提交散列。组提交有一个
group.config
和一个members
文件。检查group.config
文件,看看它是否是Administrators组:git show f582a7915e6d86c8167840da789aa719e65074ee:group.config
初始Admin组的输出应类似于以下内容:
1.太棒了!所以我们已经确定git ref
refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5
(2)是Administrators组,最新提交为f582a7915e
(1)。我们以后会记住这些的。1.现在,我们将创建一个新提交并将其添加到ref中,这是一种困难的方法。
1.我们将创建一个包含用户的新
members
文件。我的Gerrit用户是100001,所以:echo -e '100000\n100001' > members
1.基于此文件创建一个新的git blob(使用
-w
将其提交到git的存储)git hash-object -w members
这将回显新创建的blob的SHA1。记下来以后用。在我的例子中,它是
3e8cd349203821044ce4a90835b034ff09916b08
(3)(you现在可以删除
members
文件)1.现在我们需要创建一个新的
git tree
,它符合Gerrit的组组织。回想一下我们之前发现的提交对象1ff7dc0b5
。让我们来看看它的树:git ls-tree 1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56
这将输出类似于:
100644 blob 0daf37cff123b35c933c86e314af03130ea984b5 group.config
100644 blob 3e8cd349203821044ce4a90835b034ff09916b08 members
因此,我们要创建一个新树,但其中的
members
文件是我们刚刚创建的文件。1.我们将保留与上一个树(
0daf37c
)中相同的group.config
:git update-index --add --cacheinfo 100644 0daf37cff123b35c933c86e314af03130ea984b5 group.config
1.从blob
3e8cd34
添加新的members
(3):git update-index --add --cacheinfo 100644 3e8cd349203821044ce4a90835b034ff09916b08 members
1.然后从我们的索引中创建一个新的树:
git write-tree
这将回显树的SHA1,我们将在稍后保留:
270bfac6c2c68e24979968083631d97c663e942e
(4)1.现在我们要用新创建的树创建一个新的提交对象。
1.要创建提交,Git需要我们的用户信息,它不能从我的容器中推断出来,所以:
git config --global user.email " [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) "
git config --global user.name "John de Largentaye"
1.然后使用前面的树
270bfac
(4)以及组的最后一次提交f582a7915e
(1)创建一个新的提交对象。我们可以通过多个-m
参数以段落块的形式传递提交消息,或者直接在shell中使用^D
(Ctrl-D
)退出:$ git commit-tree 270bfac6c2c68e24979968083631d97c663e942e -p f582a7915e6d86c8167840da789aa719e65074ee
这将回显新创建的提交对象的SHA。在我的情况下:
1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56
(5)1.最后,更新Gerrit组ref
refs/groups/aa/aaea35
(2)以指向我们的新提交1ff7dc
(5)。我们将引用之前的提交哈希f582a79
(1),以允许git复查我们的工作,确保更新的ref正确:1.重新启动Gerrit,以您的用户身份登录,然后转到“组”,看看您现在是否可以看到并编辑Administrators组!
a6b3iqyw5#
如果您知道管理员用户是谁,并且您使用LDAP身份验证,则可以让LDAP管理员在LDAP中更改该特定用户的密码,给予它一些时间进行复制,然后您应该能够以该用户身份登录并将自己添加到Administrators组。