首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法通过gitlab python api从gitlab项目中同时获取当前和旧用户名?

有没有办法通过gitlab python api从gitlab项目中同时获取当前和旧用户名?
EN

Stack Overflow用户
提问于 2021-11-28 21:31:41
回答 1查看 73关注 0票数 2

我目前正在尝试将我的gitlab项目中的每一次提交都放到一个数据库中。我还有一个表,其中包含项目的所有用户,我希望将这些用户与提交表连接起来。

我通过命令1- for user in self.project.users.list(all = True)获取项目的所有用户。

我通过命令2- for c in self.project.commits.list(all = True):获得所有提交。

我尝试使用每个提交的.author_name属性将提交与用户相关联。但是我注意到项目中的一些人更改了他们的名字,现在我从命令1得到的名字与通过.author_name属性给出的名字不同。

有没有办法解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-11-29 23:02:39

因为git提交信息独立于GitLab用户信息,所以没有可靠的方法来做到这一点--至少不能追溯或在每种情况下都具有100%的准确性/确定性。

例如,用户可以很容易地使用根本不存在的作者/提交者姓名/电子邮件创建提交。

代码语言:javascript
运行
复制
git config --local user.name "A fictitious name"
git config --local user.email "nonexistant@example.com"
git commit -m "you cant find me"
git push  # works fine

但是,您可以通过一种或多种方法使这种查找和关联更加可靠。

确保提交者电子邮件为GitLab用户的推送规则

可以使用预定义的推送规则“检查提交作者是否为GitLab用户”来设置push rule,该规则将确保作者的电子邮件与活动GitLab用户的电子邮件相匹配。

这将使映射提交回GitLab用户更加可靠,因为作者电子邮件必须是有效/活动的GitLab用户。

由于这个规则,上面的例子也会导致推送失败。然而,随着时间的推移,用户可能会更改他们的电子邮件,这将导致您今天遇到的类似问题。

所有提交都需要GPG签名

与“检查提交作者是否为GitLab用户”推送规则类似,另一种使此关联更可靠的可能方法是使用“拒绝未验证提交”推送规则要求所有提交的已验证提交(GPG签名)。这样,您就可以更容易地依赖签名信息将其与特定用户关联起来。

如果提交被验证,这意味着(1)使用GPG密钥签名提交,(2) GPG密钥电子邮件匹配GitLab用户的验证电子邮件,以及(3)提交电子邮件匹配GPG密钥电子邮件。

此外,GPG签名本身将包含用户名和电子邮件。

代码语言:javascript
运行
复制
for c in self.project.commits.list(as_list=False)
    signature = c.signature() # the commit needs to be signed for this to work
    print(c, 
          'was authored by', 
          signature['gpg_key_user_name'], 
          signature['gpg_key_user_email']
    )

这基本上与验证提交的GitLab UI中显示的信息相同:

针对用户API的交叉引用

使用上面描述的两种方法中的任何一种,提交信息(提交者电子邮件或GPG密钥ID)可以进一步对照用户API进行交叉引用。例如,如果提交者仍然是活动的GitLab用户,则可以使用该应用编程接口查找每个用户的电子邮件地址或GPG键,并使用提交信息对它们进行交叉引用。

当然,这只适用于在建立提交签名规则之后创建的提交/项目。您不能为现有的提交回溯创建此信息。其他一些caveats也适用。

由于user API提供的信息可能会随着时间的推移而变化(电子邮件和GPG密钥可能会随着时间的推移而添加/删除,或者用户可能会从GitLab中完全删除),因此不可能在每个场景中都从特定的提交中获得GitLab用户ID。

在这种情况下,协调更改的唯一方法是审计随时间变化的状态(例如,通过参考GitLab服务器日志或自我管理实例上的审计日志)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70147627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档