2017-12-13 1 views
0

this questionの解決策は機能しませんでした。git push:期待されるコミッター名/電子メール

私は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を言って、エラーの束を取得しています。私はgitlabから引っ張ってbranchAにマージしたmasterへの各コミットのためにこれらの両方のエラーを得ています。 masterのそれらのコミットは他の誰かによって作られましたが、私はbranchAにマージしました。

この問題を解決することは可能ですか?

+0

gitグローバルを既に設定しましたか? 'git config --list |は何ですか? grep user'は言う? – Chad

+0

私の名前とメールアドレスが記載されています – ewok

答えて

2

それぞれのGitは独自の独立したエンティティであり、独自のルールを作ることができます(あるいは、何らかのGit管理者がそれを補完することもできます)。

gitlabと呼んでいるマシンのGitは、偽のコミッター名や電子メールアドレスを持つコミットを許可する簡単なルールを持っていると思われます。自分のマシン上のあなた自身のGitも同様です。しかし、bitbucketと呼んでいるURL上のGitは厳しくなっています。

マスターのコミットは他の誰かによって作成されましたが、branchAにマージされました。

この問題を解決することは可能ですか?

あなたの側ではありません。あなたはを避けることができますそれは、いくつかのコストで、しかしあなたはを解決することはできませんそれ。

基本的には、gitlabでGitから取得し、独自のGitリポジトリに格納したコミットオブジェクトが、bitbucketというGitの要件を満たしていないという問題があります。さらに、すべてのGitオブジェクトは読み込み専用です。一度作成すると変更できません。既存のGitオブジェクトがというGitによって課された要件を満たす唯一の方法は、それらの要件が緩和されているかどうかです。

これは可能かもしれませんが、最後にできることではありません。接続のBitbucketの端でそれを行うことができますあなたは十分な管理者権限を持っていて、BitBucketの人々がその厳密性を制御するための適切なノブを備えています。

また、あなたは、これらの単独でのオブジェクトをコミット残したまま、は、新しい作ることができるとを改善は非常にオリジナルのようなもので、オブジェクトをコミットするが、それはbitbucketでGitがに反対していることは何でも修正しています。これらの新しく改良されたコミットとあなたの仕事をマージして、結果をGitにbitbucketでプッシュすることができます。それは私が上記の「回避」と呼ぶものです。あなたは実際にを固定していません何か:壊れている(とにかくbitbucketでのGitの目にある)コミットは依然として壊れています。あなたはちょうどをと使っています。少なくともGitに送るものはbitbucketです。

コミットを1つずつコピーするには、git cherry-pickを使用できます。結果として得られるコミットには、作成者としてのオリジナルの作者と、コミッターとしてのデフォルトの作者があります。 en-masseをコミットするには、git rebase(いろいろなやり方でややこしい)やを使うことができます(これは、コピープロセスを大いに制御しますが、いくつかの点では扱いにくいです。あなたは実際にすべてのコントロールが何をするか知っている必要があります)。

いずれの場合でも、オリジナルのコピーはオリジナルと同じではありません。元のものは変更できないため、必然です。元のコピーと新しいコピーの両方を使用する必要があるすべての人に頭痛を引き起こしますこれはおそらく自分自身を含む)。 誰もがに新しい "修正済み"コミットに切り替えることができない限り、行く方法ではないかもしれません。

関連する問題