سؤال

أحاول استخدام 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top