【问题标题】:git push: expected committer name/emailgit push:预期的提交者姓名/电子邮件
【发布时间】:2018-05-27 17:55:55
【问题描述】:

this question 列出的解决方案不起作用。

我有一个带有 2 个遥控器的仓库。我一直在 bitbucket 工作,但我需要从 gitlab 中提取和合并一些更改。所以我执行了这个:

$ git checkout master
$ git pull gitlab master
$ git checkout branchA
$ git merge master # no conflicts
$ git push gitlab branchA # no issues
$ git push bitbucket branchA # !FAILURE!

我现在收到一堆错误,说 expected committer nameexpected committer email。对于我从gitlab 提取并合并到branchA 的每次提交到master,我都会遇到这两个错误。 master 中的那些提交是由其他人完成的,但合并到 branchA 是由我完成的。

这个问题能解决吗?

【问题讨论】:

  • 你已经设置好你的 git 全局变量了吗? git config --list | grep user 说什么?
  • 它列出了我的姓名和电子邮件地址

标签: git


【解决方案1】:

每个 Git 都是它自己的独立实体,并且可以制定自己的规则(或者让某个 Git 管理员为其制定规则)。

您调用gitlab 的机器/URL 上的Git 似乎有简单的规则,允许使用虚假或缺少提交者姓名和/或电子邮件地址的提交,并且您自己机器上的Git 也同样允许。但是,您调用 bitbucket 的 URL 上的 Git 更严格。

master 中的那些提交是由其他人完成的,但合并到 branchA 是由我完成的。

这个问题能解决吗?

不是在你的最后,不。你可以回避它,但你不能解决它。

从根本上说,问题在于您从 gitlab 的 Git 获得并存储到您自己的 Git 存储库中的提交对象不符合 bitbucket 的 Git 提出的要求。此外,每个 Git 对象都是只读的:一旦创建,就永远无法更改。那些现有的 Git 对象通过 Git 在bitbucket 提出的要求的唯一方法是放宽这些要求。

这可能是可能的,但不是您最终可以做的事情。您可以在连接的 Bitbucket 端执行此操作如果您在那里有足够的管理员权限和/或他们(Bitbucket 人员)提供了适当的旋钮来设置以控制其严格。

或者,您可以在不理会这些提交对象的情况下,制作 新的和改进的提交对象,它们与原始对象非常相似,但已更正了 bitbucket 的 Git 是什么反对。然后,您可以将您的工作与这些新的和改进的提交合并,并将结果推送到 bitbucket 的 Git,他们现在可能会对它们感到满意。这就是我上面所说的“回避”。您实际上并没有修复任何东西:损坏的(无论如何在bitbucket 的Git 眼中)提交仍然损坏。您只是不再使用它们,至少在将内容发送到 bitbucket 的 Git 方面。

要一次复制一个提交,您可以使用git cherry-pick。默认情况下,生成的提交将以原作者为作者,您作为提交者。要批量复制提交,您可以使用git rebase(这在各个方面都有点棘手)或git filter-branch(这使您可以对复制过程进行极大的控制,但在某些方面却非常棘手,因为随着所有这些控件,您必须真正了解所有控件做什么)。

在任何情况下,您的新副本都不会与原件相同(这是必然的,因为原件无法更改)并且会让需要同时使用原件和新副本的每个人都感到头疼(这可能包括你自己)。所以这可能不是要走的路,除非你能以某种方式说服每个人切换到新的“更正”提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 2014-11-14
    • 2015-04-10
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多