为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 name
或expected committer email
。对于我从master
提取并合并到gitlab
的{{1}}提交,我收到了这两个错误。 branchA
中的提交是由其他人提交的,但合并到master
是由我做出的。
有可能解决这个问题吗?
答案 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
(这使您可以对复制过程进行大量控制,但在几个方面很难处理方式,因为除了所有控制之外,你必须真正知道所有控件做什么。)
在任何情况下,您的新副本都不会与原件相同 - 因为原件无法更改 - 并且会为需要同时使用原件和原件的每个人带来麻烦。新副本(这可能包括你自己)。所以它可能不是可行的方式,除非你能以某种方式说服所有人切换到新的"更正"提交。