خطأ p4merge [GIT]
سؤال
أحاول استخدام p4merge مع git لكني أحصل على:
خطأ في بدء p4merge:"path/myFile" هو (أو يشير إلى) ملف غير صالح (يسرد هذا الإصدار الأساسي والمحلي والبعيد والقياسي للملف).
يخبرني Git عن التعارض ثم يسألني عما إذا كنت أريد بدء تكوين أداة الدمج (p4merge) ثم أحصل على الخطأ أعلاه.
مذكرة إضافية:يحدث مع أي ملف!
أي فكرة حول ما هو هذا وكيفية اصلاحها؟
المحلول
نجح هذا بالنسبة لي باستخدام msysGit على نظام التشغيل Windows 7:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
لست متأكدًا من السبب ولكن الاقتباس أفسد الأمور بالنسبة لي.
نصائح أخرى
سوف تفعلها انظر هنا التكوين الخاص بي لـ DiffMerge أو KDiff3.
وبناءً على ذلك، أوصي بـ p4merge:
git config --global merge.tool merge
git config --global mergetool.merge.cmd "merge.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
و merge.sh
كونه غلافًا (تم نسخه في الدليل المشار إليه بواسطة ملف PATH
متغير البيئة)، قادرة على أن تأخذ في الاعتبار الحالة التي لا BASE
موجود.
(عند إنشاء ملف في فرعين مختلفين ثم دمجهما، لن يكون هناك سلف مشترك لهذا الملف)
#!/bin/sh
# Passing the following parameters to mergetool:
# local base remote merge_result
alocal=$1
base=$2
remote=$3
result=$4
if [ -f $base ]
then
p4merge.exe -dl "$base" "$alocal" "$remote" "$result"
else
p4merge.exe -dl "$result" "$alocal" "$remote" "$result"
fi
قد تلاحظ:
- استخدام
PWD
في تكوين الدمج - استخدام "
merge
" كاسم لاسم merge.tool (نظرًا لأن الأداة الفعلية تسمى في ملف merge.tool).merge.sh
البرنامج النصي، حيث يمكنك التبديل بين أي عدد من أدوات الدمج التي تريدها) - استخدام علامات الاقتباس المزدوجة حولها
$base
,$alocal
,$remote
,$result
داخل البرنامج النصي - المسار الشرطي لاستدعاء الأداة، بناءً على وجود الملف "الأساسي".
- الحاجة إلى وجود 3 ملفات دائمًا لدمجها كمعلمات (حتى في حالة عدم وجود "قاعدة"...)
لقد اختبرته للتو (اتضح أنه يمكنك ذلك تنزيل وتثبيت p4merge فقط - قسم العميل/أداة الدمج المرئي -، حتى إذا لم يكن لديك أي منتج P4 آخر مثبتًا).
باستخدام الإعدادات الموضحة أعلاه، MSysGit1.6.3 أو جلسة DOS أو جلسة Git bash:
إنه يعمل فقطTM.
تحديث مسيسجيت 1.7.x
بنجول يذكر في التعليقات:
يتم الآن دعم p4merge محليًا بواسطة msysgit.
هذا يعني أنه يمكنك فقط القيام بما يلي:
git config --global merge.tool p4merge
# and I recommend
git config --global mergetool.keepBackup false