2

git p4 rebase に問題があり、問題の診断を開始する方法がわかりません。問題が何であるかはなおさらです。

だから私は git-p4 によって perforce ワークスペースから複製された git リポジトリを持っており、それはブリッジとして機能するリモート リポジトリとして使用されているため、チームは 1 つのリモート リポジトリに対して git を使用し、定期的にリポジトリの変更をプッシュして戻すことができます。ワークスペース。

そして通常、ワークフローは、人が master ブランチにいて、編集を行い、git -a commitそれらを編集git pullgit pushてから、リモートリポジトリに送信するか、ブランチを作成し、完了したらそのブランチをマージするかのいずれかです次に、マスター ブランチをリモートにプッシュします。1日以上かかると、時々枝を押し上げることがあります。

ものを perforce に戻すときは、リモート リポジトリで次のコマンドを実行します。

git checkout -f
git clean -f
git p4 rebase --import-labels
git p4 submit -M --export-labels
git checkout -f
git clean -f

リモートリポジトリはむき出しではないため、前後にチェックアウトとクリーンを実行しています

基本的に、変更がプッシュされた後、git p4 rebase を実行すると、次のエラーが表示されます。

Performing incremental import into refs/remotes/p4/master git branch
Depot paths: //depot/sub/folder/
No changes to import!
Rebasing the current branch onto remotes/p4/master
First, rewinding head to replay your work on top of it...
Applying: A commit that has already been made previously
Applying: A second commit that has already been made in a previous commit
Using index info to reconstruct a base tree...
<stdin>:15: space before tab in indent.
                            a line of text
<stdin>:24: space before tab in indent.
                another line of text
<stdin>:25: space before tab in indent.
                a third line of text
<stdin>:33: trailing whitespace.
        a forth line of text
<stdin>:71: trailing whitespace.

warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging file from second
CONFLICT (content): Merge conflict in a/file/in/the/second/pre-existing/commit/file.php
Auto-merging a/file/in/the/second/pre-existing/commit/file.php
Failed to merge in the changes.
Patch failed at 0002 A second commit that has already been made in a previous commit

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

Traceback (most recent call last):
  File "/usr/lib/git-core/git-p4", line 3373, in <module>
    main()
  File "/usr/lib/git-core/git-p4", line 3367, in main
    if not cmd.run(args):
  File "/usr/lib/git-core/git-p4", line 3150, in run
    return self.rebase()
  File "/usr/lib/git-core/git-p4", line 3167, in rebase
    system("git rebase %s" % upstream)
  File "/usr/lib/git-core/git-p4", line 183, in system
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'git rebase remotes/p4/master' returned non-zero exit status 1

いくつかの質問があります。ここで、git rebase を実行しているときにgit p4 rebase、リモート リポジトリに既に適用されていて、以前のgit p4 rebase. 重複したコミットはどこから来たのですか? リポジトリでそれらを再生しようとしているのはなぜですか?

リポジトリの作業コピーでファイルを確認すると、最後のgit p4 rebase. その結果、git rebase --continue実際には何もしません。

唯一の解決策は実行git rebase --skipすることですが、それを実行すると、次回の実行時に同じメッセージが表示され、毎回git p4 rebase再実行する必要があります。git rebase --skipそれは腹立たしいです。

また、このメッセージを確認した後、実行時にコミットが実際に p4 ワークスペースにプッシュされ、git p4 submitp4 サブミットが重複してファイルがめちゃくちゃになる方法がよくわからないことがあります。私が実行するとそれが起こると信じていgit rebase --continueますgit rebase --skipgit p4 submit

git のログを確認すると、通常は HEAD がコミットで master より進んでいますが、どのように?

その後、エラーが再び消えることがありますが、エラーが消える条件を正確に把握することはできません。

どうすればこの問題を理解し始めることができますか?

4

1 に答える 1

1

私はまだあなたのワークフローについて混乱していると思います。コミットを Perforce に直接プッシュしていますか、それとも実行中のオリジン git リポジトリにプッシュしていますかgit p4 submit。あなたが後者をしているなら、それがあなたの主な問題だと思います。ローカルの変更を Perorce に直接プッシュしてから、すべてを と同期する必要がありますgit p4 rebase。を実行するgit p4 submitと、新しいコミットは perforce にプッシュされる前に変更されます。そのため、最初に別の git リポジトリにプッシュすることはできません。

コミットを作成したクライアント マシンから常に実行している場合p4 submit、エラーは Perforce 側のユーザー名/電子メールとの何らかのタイプの不一致が原因である可能性があります。各 git commit sha1 は、作成者の電子メールとコミット日 (およびその他のもの) を使用して基づいています。これらの値が変更git-p4 rebaseされた場合、ローカルにあるものとは異なる sha1 が生成され、そのエラー メッセージが表示される可能性があります。

git-p4perforceユーザー名から電子メールへのマッピングファイルを作成することで、これを補おうとします。このファイルがどこに保存されているか忘れましたが、紛失すると git-p4 が混乱し、既に持っているコミットを再適用しようとします。

したがって、解決策は、perforce 側で電子メールの値を変更しないか、混乱を招く可能性のあるその他のものを変更しないことですgit-p4。メールを強制的に変更する場合は、すべてのコミットを最初から再インポートするまで、元のマッピング ファイルを保持する必要があります。

于 2013-04-23T03:24:05.067 に答える