Я пытаюсь использовать git-p4 под Cygwin. «Клон» и «rebase» части рабочего процесса, похоже, работают правильно, но я не могу «отправить». Я предполагаю, что это может иметь какое-то отношение к соглашению о кончине. Я просмотрел this git-p4 issue и связанные с ним элементы, но манипуляции с конфигурацией строк и пробелов пока не увенчались успехом. Пункты примечания в моей конфигурации:Git P4 под Cygwin: Отправить не удается «Патч не применяется»
(1) Я использую Баш функцию оболочки трюк, чтобы получить пути для правильной работы:
$ type p4
p4 is a function
p4()
{
P4=`which p4`;
PWD=$(cygpath -wa .) "${P4}" "[email protected]"
}
(2) Я пробовал все настройки autocrlf
значения GIT в - результатом является отказ независимо от (true, false, input). В настоящее время попытка «ложного», поскольку это имеет наибольший смысл при сравнении с депо.
(3) Я также играл с параметрами линии p4 clientspec; в настоящее время пытается «unix», b/c Cygwin и сервер песочницы P4, работающий под OSX.
Тест прост. Репо содержит один файл, foo1. Версия депо выглядит (выход с помощью od -c
):
0000000 f o o 1 \n \n
0000006
локально-ГИТ-зафиксированной версия выглядит следующим образом:
0000000 f o o 1 i s t h e o n e !
0000020 \n \n
0000022
Я добавил некоторый дополнительный диагностический вывод метод applyCommit()
в git- p4. Это в сочетании с запуском submit --verbose:
$ git p4 submit --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 ce414288d1b5d52dbad20c1a29f1875cfff7c281
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/foo/...']
Perforce checkout for depot path //depot/foo/ located at c:\git\foo\
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.detectRenames']
Reading pipe: ['git', 'config', 'git-p4.detectCopies']
Reading pipe: ['git', 'config', '--bool', 'git-p4.detectCopiesHarder']
Reading pipe: ['git', 'show', '-s', '--format=format:%h %s', '2303176ae8c575313616ae2c4a35358258742598']
Applying 2303176 updating foo1
Opening pipe: p4 -G users
Reading pipe: ['git', 'log', '--max-count=1', '--format=%ae', '2303176ae8c575313616ae2c4a35358258742598']
Reading pipe: git diff-tree -r "2303176ae8c575313616ae2c4a35358258742598^" "2303176ae8c575313616ae2c4a35358258742598"
//depot/foo/foo1#1 - opened for edit
Sanity: git diff-tree --full-index -p "2303176ae8c575313616ae2c4a35358258742598" | git apply --verbose --check -
Checking patch foo1...
error: while searching for:
foo1
error: patch failed: foo1:1
error: foo1: patch does not apply
Unfortunately applying the change failed!
Reading pipe: ['git', 'config', '--bool', 'git-p4.attemptRCSCleanup']
//depot/foo/foo1#1 - was edit, reverted
Обратите внимание на диагностическую линию «Sanity:». Это значение tryPatchCmd
, которое выходит из строя в методе applyCommit()
. Если я выполнить первую часть заявления в командной строке Баша, я вижу:
2303176ae8c575313616ae2c4a35358258742598
diff --git a/foo1 b/foo1
index 630baf44b0874b3319c2814399f0b03106912183..4c23e4512b3347ec31068e464b64cbd99851cc9a 100644
--- a/foo1
+++ b/foo1
@@ -1,2 +1,2 @@
-foo1
+foo1 is the one!
Трубопроводов это ко второй части результатов команды в отсутствии ошибки. Я недоумеваю, почему команда не выполняется при выполнении с использованием os.system()
в сценарии Python, но в противном случае она преуспевает. Мысли?