git 如何以管理员身份登录

uinbv5nw  于 12个月前  发布在  Git
关注(0)|答案(5)|浏览(173)

我在Ubuntu服务器上安装了我的Gerrit。
正如Gerrit所说:第一个登录gerrit的人是管理员。
所以我先用openID(谷歌帐户)登录,我确实是管理员。
但是,当第二天我重新登录我的谷歌帐户,我成为一个新的注册。ID是100001(管理员的ID是100000),但两个电子邮件是谷歌的电子邮件,是相同的。
发生什么事了?

vulvrdjw

vulvrdjw1#

最简单的方法是暂时禁用经过身份验证的登录。
编辑gerrit.config中的[auth]语句,如下所示:

[auth]
type = development_become_any_account

然后以管理员身份强制登录,授予自己访问权限,然后恢复[auth]配置。
请记住,在此期间访问您的服务器的任何人也可以是任何帐户,因此在完成上述步骤时,请设置防火墙或其他东西以将访问范围缩小到您的工作站。

yqlxgs2m

yqlxgs2m2#

gerrit自动分配第一个登录作为管理员,并把你的谷歌帐户作为另一个ID。
您可以
1.使用openid登录并将google帐户id添加到管理员组中
1.手动更改数据库system_config为您的谷歌帐户.
请参阅https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/access-control.html#administrators
希望能给点提示。

sigwle7e

sigwle7e3#

我也遇到了类似的问题,发现Shawn皮尔斯在邮件列表上的回复很有用:
https://groups.google.com/d/msg/repo-discuss/FkIPsL28OXM/OBJvKaMh-wgJ
HTH、

c6ubokkw

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组的输出应类似于以下内容:

[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' > 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中使用^DCtrl-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正确:

git update-ref \
refs/groups/aa/aaea352bb556868bc6027957d670939b66a953b5 \
1ff7dc0b5813656e5f0b388b7bb94c060f2dbc56 \
f582a7915e6d86c8167840da789aa719e65074ee

1.重新启动Gerrit,以您的用户身份登录,然后转到“组”,看看您现在是否可以看到并编辑Administrators组!

a6b3iqyw

a6b3iqyw5#

如果您知道管理员用户是谁,并且您使用LDAP身份验证,则可以让LDAP管理员在LDAP中更改该特定用户的密码,给予它一些时间进行复制,然后您应该能够以该用户身份登录并将自己添加到Administrators组。

相关问题