Git P4 отправить не удается

Я попытался запустить git p4 submit в репозитории, который я использовал в качестве промежуточного моста между git и перформансом. Несколько человек используют репо в качестве пульта, и его периодически отправляют на исполнение.

Он работал в основном нормально, за исключением некоторых дублированных коммитов, чье странное поведение я не могу воспроизвести. Тогда однажды неожиданно я получаю эту ошибку. Я больше не могу толкать любые коммиты git на исполнение.

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 включенный.

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']

2 ответа

Решение

Я понял. Проблема вызвана окончанием строки. Я повторно протестировал проблему с другим файлом, и в этом случае ошибка вызвана тем, что окончания строк файла, извлеченного в рабочей области Perforce в виде win-style crlf, и окончаний строк файла в git repo в стиле unix низкая частота

В этом случае я проверил файл в Perforce, запустил dos2unix и отправил его, затем запустил git p4 submit и все заработало.

Это не настоящее решение. Это просто обходной путь. Я отправил электронное письмо в список рассылки git с просьбой исправить. http://marc.info/?l=git&m=136630231402536&w=2

Для меня подача работала после того, как я установил git config apply.ignorewhitespace change,

Я думаю, что ошибка происходит из-за мерзавца core.whitespace настройка ограничена по умолчанию:

Те, которые включены по умолчанию, имеют значение blank-at-eol, которое ищет пробелы в конце строки; blank-at-eof, который замечает пустые строки в конце файла; и пробел перед табуляцией, который ищет пробелы перед табуляцией в начале строки.

(см. http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)

настройка apply.ignorewhitespace change позволяет git apply исправить эти ошибки. Изменение core.whitespace установка менее строгих настроек также должна решить проблему, но я не пробовал этого.

Обратите внимание, что git p4 submit может произойти сбой, если вы не сделаете ребаз. Так что обязательно беги git p4 rebase перед отправкой.

Другие вопросы по тегам