git push:预期的提交者名称/电子邮件

时间:2017-12-13 18:29:08

标签: git

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。对于我从master提取并合并到gitlab的{​​{1}}提交,我收到了这两个错误。 branchA中的提交是由其他人提交的,但合并到master是由我做出的。

有可能解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

每个Git都是它自己的独立实体,可以自己制定规则(或者让Git管理员为它们做好准备)。

您正在调用gitlab的计算机/网址上的Git似乎有简单的规则,允许提交伪造或丢失提交者名称和/或电子邮件地址,并且您自己的Git在您的计算机上同样允许。但是,您调用的网址bitbucket上的Git更严格。

  

主人的提交是由其他人提出的,但合并到branchA是由我做的。

     

有可能解决这个问题吗?

不在你的最后,没有。您可以回避它,但需要付出一定代价,但您无法解决它。

从根本上说,问题是你在gitlab从Git获得并且存储到你自己的Git存储库中的提交对象不符合Git在bitbucket强加的要求。而且,每个Git对象都是只读的:一旦生成,它就永远不会被改变。这些现有Git对象在bitbucket处通过Git强加的要求的唯一方法是放宽这些要求。

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

或者,您可以在单独保留这些提交对象的同时,使新的和改进的提交对象与原始文件非常相似,但已更正了{{1}处的Git。反对。然后,您可以将您的工作与这些新的和改进的提交合并,并将结果推送到bitbucket的Git,他们可能会对它们感到满意。这就是我所说的"回避"以上。你实际上并没有修复任何东西:破碎的(在bitbucket的Git眼中)提交仍然被破坏。您已经不再使用,至少在bitbucket向Git发送内容方面。

要一次一个地复制提交,您可以使用bitbucket。生成的提交将默认为原作者作为作者,您作为提交者。要集中复制提交,您可以使用git cherry-pick(这在某些方面有点棘手)或git rebase(这使您可以对复制过程进行大量控制,但在几个方面很难处理方式,因为除了所有控制之外,你必须真正知道所有控件做什么。)

在任何情况下,您的新副本都不会与原件相同 - 因为原件无法更改 - 并且会为需要同时使用原件和原件的每个人带来麻烦。新副本(这可能包括你自己)。所以它可能不是可行的方式,除非你能以某种方式说服所有人切换到新的"更正"提交。