6

git と perforce の間の暫定的なブリッジとして実行しているレポで git p4 submit を実行してみました。複数の人がレポをリモートとして使用しており、定期的にperforceに送信されています。

奇妙な動作を再現できないように見える重複した perforce コミットを除いて、ほとんど問題なく動作しています。それからある日突然、このエラーが発生します。git コミットを perforce にプッシュできなくなりました。

user@hostname:~/Source/code$ git p4 submit -M --export-labels
Perforce checkout for depot path //depot/perforce/workspace/ located at /home/user/Source/git-p4-area/perforce/workspace/
Synchronizing p4 checkout...
... - file(s) up-to-date.
Applying ffa390f comments in config xml files
//depot/perforce/workspace/sub/folder/structure/first.xml#3 - opened for edit
//depot/perforce/workspace/sub/folder/structure/second.xml#3 - opened for edit
//depot/perforce/workspace/sub/folder/structure/third.xml#3 - opened for edit
//depot/perforce/workspace/sub/folder/structure/forth.xml#3 - opened for edit
//depot/perforce/workspace/sub/folder/structure/fifth.xml#1 - opened for edit
error: patch failed: sub/folder/structure/first.xml:1
error: sub/folder/structure/first.xml: patch does not apply
error: patch failed: sub/folder/structure/second.xml:1
error: sub/folder/structure/second.xml: patch does not apply
error: patch failed: sub/folder/structure/third.xml:1
error: sub/folder/structure/third.xml: patch does not apply
error: patch failed: sub/folder/structure/forth.xml:1
error: sub/folder/structure/forth.xml: patch does not apply
error: patch failed: sub/folder/structure/fifth.xml:1
error: sub/folder/structure/fifth.xml: patch does not apply
Unfortunately applying the change failed!
//depot/perforce/workspace/sub/folder/structure/first.xml#1 - was edit, reverted
//depot/perforce/workspace/sub/folder/structure/second.xml#3 - was edit, reverted
//depot/perforce/workspace/sub/folder/structure/third.xml#3 - was edit, reverted
//depot/perforce/workspace/sub/folder/structure/forth.xml#3 - was edit, reverted
//depot/perforce/workspace/sub/folder/structure/fifth.xml#3 - was edit, reverted
No commits applied.

そのエラーは、次のエラーによく似ています。

パッチが適用されずに git-p4 submit が失敗する

ただし、キーワードの置換を行っていないため、それが何であるかはわかりません。追加--verboseはあまり説明に役立たないようです(そのコマンド出力は手元にありません)

私が想像できる唯一の変更点は、コミット時に以下の内容の .gitattributes ファイルを追加したことです。ただし、そのgitattributesファイルが配置されている間にこのコミットの前に行われたコミットは機能したため、そうではありませんでした(その後、.gitattributesファイルをより詳細にしました)

* text eol=lf

このリモートリポジトリのコミットをこの問題のあるコミットの直前にロールバックし、リポジトリからこのリモートリポジトリに再プッシュしてから再送信しようとしました。同じ動作。ロールバックして、同じファイルにさまざまな編集を加え、再プッシュ、再送信しようとしました。同じ動作。そして、これらのファイルでのみ発生するようです。ロールバック以来、他のファイルを編集しようとしましたが、それらは機能します。dos2unix を実行して、問題のあるファイルに unix の行末を強制しようとしましたが、それも修正されませんでした。

ここで何が起こっているかをよりよく説明できるコマンドはどれですか? 私が追跡できるgitログファイルはありますか? 任意の支援をいただければ幸いです。

編集: .gitattributes ファイルの有無にかかわらず、問題を再テストしました。それは違いはありませんでした。現在、私のグローバルcore.autocrlf設定は入力です。しかし、 .gitattributes ファイルが欠落しているため、違いはないようです。--verboseこれは、問題のあるファイルの 1 つだけをオンにして再テストしたときの様子です。

user@hostname:/code$ git p4 submit -M --export-labels --verbose
Reading pipe: git name-rev HEAD
Reading pipe: ['git', 'config', 'git-p4.allowSubmit']
Reading pipe: git rev-parse --symbolic --remotes
Reading pipe: git rev-parse p4/master
Reading pipe: git cat-file commit 0457c7589ea679dcc0c9114b34f8f30bc2ee08cf
Reading pipe: git cat-file commit HEAD~0
Reading pipe: git cat-file commit HEAD~1
Reading pipe: ['git', 'config', 'git-p4.conflict']
Origin branch is remotes/p4/master
Reading pipe: ['git', 'config', '--bool', 'git-p4.useclientspec']
Opening pipe: ['p4', '-G', 'where', '//depot/perforce/workspace/...']
Perforce checkout for depot path //depot/perforce/workspace/ located at /home/user/Source/git-p4-area/perforce/workspace/
Synchronizing p4 checkout...
... - file(s) up-to-date.
Opening pipe: p4 -G opened ...
Reading pipe: ['git', 'rev-list', '--no-merges', 'remotes/p4/master..master']
Reading pipe: ['git', 'config', '--bool', 'git-p4.skipUserNameCheck']
Reading pipe: ['git', 'config', 'git-p4.detectCopies']
Reading pipe: ['git', 'config', '--bool', 'git-p4.detectCopiesHarder']
Reading pipe: ['git', 'show', '-s', '--format=format:%h %s', 'ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e']
Applying ef3b95f making test change
Opening pipe: p4 -G users
Reading pipe: ['git', 'log', '--max-count=1', '--format=%ae', 'ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e']
Reading pipe: git diff-tree -r -M "ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e^" "ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e"
//depot/perforce/workspace/sub/folder/structure/first.xml#3 - opened for edit
<stdin>:17: trailing whitespace.
<!-- comment line 1 -->
<stdin>:18: trailing whitespace.
<!-- comment line 2 -->
<stdin>:19: trailing whitespace.
<!-- comment line 3 -->
error: patch failed: sub/folder/structure/first.xml:1
error: sub/folder/structure/first.xml: patch does not apply
Unfortunately applying the change failed!
Reading pipe: ['git', 'config', '--bool', 'git-p4.attemptRCSCleanup']
//depot/perforce/workspace/sub/folder/structure/first.xml#3 - was edit, reverted
No commits applied.
Reading pipe: ['git', 'config', '--bool', 'git-p4.exportLabels']
Opening pipe: ['p4', '-G', 'labels', '//depot/ipstor.maple/automation/...']
Reading pipe: ['git', 'tag']
Reading pipe: ['git', 'config', 'git-p4.labelExportRegexp']
4

3 に答える 3

3

私はそれを考え出した。この問題は、行末が原因で発生します。別のファイルで問題を再テストしましたが、この場合、perforceワークスペースでチェックアウトされたファイルの行末がwinスタイルのcrlfであり、gitリポジトリのファイルの行末がUNIXスタイルであることがエラーの原因ですlf。

この場合、ファイルを perforce でチェックアウトし、それに対して dos2unix を実行し、それを送信してから、git p4 submit を実行したところ、機能しました。

それは本当の解決策ではありません。それは単なる回避策です。修正を求める電子メールを git のメーリング リストに送信しました。http://marc.info/?l=git&m=136630231402536&w=2

于 2013-04-18T18:07:43.220 に答える