سؤال

أحاول استخدامها دمج أراكسيس كأداة فرق/دمج لـ MSYSGit.

لقد وجدت بعض الموارد على الشبكة:

  • على ال موقع اراكسيس, ، يذكرون طريقة "سهلة"، ولكنها تتضمن ملفات قابلة للتنفيذ (araxisgitdiff.exe وaraxisgitmerge.exe) ليست جزءًا من التوزيعة الخاصة بي.
  • لقد وجدت أيضًا بعض المعلومات في gitguru, ، لكن المعلومات الفعلية تتعلق بما يلي:Araxis متناثر في أحسن الأحوال، ولم أتمكن من تحقيق أي شيء من ذلك.
  • وأخيرا، كانت هناك بعض المعلومات عن كبار السن مشاركة تدفق المكدس, لكن الطريقة المقترحة لا تناسبني.كانت هذه المعلومات المحددة موجهة نحو OS X.لقد "ترجمت" إلى Windows بأفضل ما أستطيع، ولكن دون جدوى:

صنعت /bin/git-diff-driver.sh

#!/bin/sh

"/c/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"

وتحريرها gitconfig

[merge]
    tool = araxismerge
[mergetool "araxismerge"]
    cmd = "/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED
[diff]
    external = "/bin/git-diff-driver.sh"

والنتيجة الوحيدة التي أحصل عليها هي:

$ git diff HEAD^ HEAD
مات الفرق الخارجي، وتوقف عند PowerEditor/src/Notepad_plus.cpp.


يحرر:

لقد حاولت أيضًا مع ملف exe المسمى باسم "c:/Program Files/Araxis/Araxis Merge/compare.exe" كما اقترحت إحدى الإجابات، مع نفس النتائج.


يحرر:

لقد وجدت أنه يمكن ضبطه بسهولة إذا كنت تستخدم TortoiseGit، ولكن يبدو أنه يتعامل مع الاختلاف من تلقاء نفسه ولا توجد إعدادات من TortoiseGit تعطي أي إشارة حول كيفية إعداد Araxis كأداة دمج عند استدعاء diff من سطر الأوامر.


يحرر:

إذن السؤال هو:هل هناك أي شخص يستخدم Araxis Merge بنجاح لتمييز الأشياء ودمجها مع MSYSGit، وإذا كان الأمر كذلك، كيف يمكنك ذلك؟

هل كانت مفيدة؟

المحلول

إذا كنت ترغب في الحصول على "git diff" فاستخدم دائمًا araxis، فيمكنك استخدام الإرشادات الموجودة في ملف المساعدة، ولكن إذا كنت تريد التحكم، فاستخدم "git diff" كما تفعل عادةً من سطر الأوامر و"git difftool" للمشاركة واجهة المستخدم الرسومية Araxis.

حاول إضافة ما يلي إلى git config::

[difftool "araxis"]
    path = "/c/Program Files/Araxis/Araxis Merge/compare.exe"
    renames = true
    trustExitCode = true
[diff]
    tool = araxis
    stat = true
[mergetool "araxismergetool"]
    cmd = 'C:\\Program Files\\Araxis\\Araxis Merge\\araxisgitmerge.exe' "$REMOTE" "$BASE" "$PWD/$LOCAL" "$PWD/$MERGED"
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = araxismergetool
    stat = true

نصائح أخرى

تم تحديث الوثائق في araxis: http://www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

يمكنني استخدام التكوين الموضح هناك دون أي تعديلات.

يمين...لقد نجحت في العمل باستخدام الإصدار msysgit 1.6.3.2.1299.gee46c، ضمن DOS أو Git Bash، مع ترخيص تقييم لـ Araxis Merge 2009، v2009.3713:

النهج هو استخدام الجديد git difftool و git mergetool, ، بدلاً من الفرق البسيط.

أولاً، لنقم بإعداد بعض البرامج النصية لأداة الفرق والدمج هذه

C:\>git config --global diff.tool adifftool
C:\>git config --global diff.external git-difftool--helper
C:\>git config --global difftool.adifftool.cmd "difftool.sh \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
C:\>git config --global difftool.prompt false

ملحوظات:

  • عن طريق تعيين diff.external إلى البرنامج النصي Git git-difftool--helper, ، سأستخدم أداة difftool حتى عندما أكتبgit diff'.
  • لا تنسى أن تمر $MERGED إلى البرنامج النصي difftool الخاص بك:هذا هو المتغير الوحيد الذي يتم اختلاف الاسم الحقيقي للملف فيه. $LOCAL و $REMOTE هي أسماء مؤقتة.

بالنسبة لأداة الدمج، يمكنك تعيين القيم العامة التالية:

C:\>git config --global merge.tool amergetool
C:\>git config --global mergetool.amergetool.cmd "mergetool.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
C:\>git config --global mergetool.prompt false

من خلال ضبط هذه الأدوات على بعض نصوص Shell البرمجية، ستتمكن من تبديل الأدوات من داخل تلك البرامج النصية.
هناك طريقة أخرى تتمثل في تسمية أدواتك (mergetool.araxis.cmd, mergetool.winmerge.cmd, ، ...) ولتحديد الأداة المناسبة في ملف diff.tool أو merge.tool جلسة.

يخلق difftool.sh و mergetool.sh في الدليل المشار إليه بواسطة متغير البيئة العالمية الخاص بك PATH.سيعملون حتى من DOS (وهم كذلك sh -- شل -- البرامج النصية)

difftool.sh

#!/bin/sh
echo Launching Araxis Merge.exe: $3
t1="'$3 (from)'"
t2="'(to)'"
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "$1" "$2" 

ملحوظات:

  • من المستحيل أن يكون لديك -title1:"someTitle With Space"...العنوان الوحيد الذي لا يحتوي على مسافة هو الذي يعمل... لذا، في الوقت الحالي، جربه دون أي مساحة.titleN' خيار.
    فهمتها!لا يمكنك تمرير قيمة العنوان مباشرة إلى -title الخيار، تحتاج إلى تعيينه على متغير محلي، مع "' '" مجموعات علامات الاقتباس (ستختفي علامات الاقتباس المزدوجة أثناء تنفيذ البرنامج النصي لـ Shell، تاركة علامات الاقتباس البسيطة، مع السماح بمسافات داخل العنوان!)
  • $3 يمثل الاسم الحقيقي وليس اسم ملف مؤقتًا لغرض مختلف.ومن هنا استخدام $3 في حدود title1 الخيار، مع وجود مساحة فيه.
  • git diff HEAD^ HEAD لن تعمل في جلسة DOS:فقط git diff "HEAD^" HEAD كان.

mergetool.sh

#!/bin/sh

# Passing the following parameters to mergetool:
#  local base remote merge_result

alocal=$1
base=$2
remote=$3
result=$4

t1="'$4 (current branch)'"
t2="'(common ancestor)'"
t3="'(to be merged)'"

if [ -f $base ]
then
    "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$base" "$remote" "$result" 
else
    "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$result" "$remote" "$result" 
fi

لست متأكدًا من أن هذه البرامج النصية تعمل بشكل صحيح عند تضمين ملفات متعددة (اختلافات متعددة، ملفات متعددة سيتم دمجها).
فقط اختبرته:إنه يعمل، ويقوم Araxis Compare.exe بفتح علامة تبويب واحدة لكل ملف للفرق أو الدمج.
جربها وأخبرنا بذلك ;)

أعتقد أنك بحاجة إلى أن تكون أكثر حذرًا عند الهروب من ملف .gitconfig الخاص بك.

لسوء الحظ، نظرًا للطريقة التي يتم بها توسيع متغير التكوين وتقييمه، يجب أن تكون السلسلة الخاصة بك عبارة عن أمر Shell صالح والذي تم بعد ذلك هروب 'git config'.

جرب شيئًا مثل هذا:

[mergetool "araxismerge"]
    cmd = \"/c/Program Files/Araxis/Araxis Merge/compare.exe\" -3 -merge -wait \"$LOCAL\" \"$BASE\" \"$REMOTE\" \"$MERGED\"

نعم، ليست جميلة جدًا، أعلم.إنها إحدى الحالات التي يتم فيها استخدام git config مباشرة هو في الواقع أسهل.

git config --global mergetool.araxismerge.cmd '"/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait "$LOCAL" "$BASE" "$REMOTE" "$MERGED"'

لقد كافحت مع هذه المشكلة لفترة طويلة، والآن يمكنني أخيرًا أن أقول إن جميع الاختراقات القذرة المقترحة (مثل نصوص shell المتوسطة) غير ضرورية إلى حد ما =D.المشكلة هي أن جميع الإصدارات الأحدث من MSYSGit (لدي 1.6.4) تدعم Araxis Merge (لدي 2008) خارج الصندوق.ليس من المستغرب أن يطلق عليه داخليًا اسم "araxis".لذا، كل ما تحتاجه هو الإعداد

[merge]
    tool = araxis

في الخاص بك .gitconfig.يجب عليك أيضًا تضمين مجلد Araxis في متغير بيئة PATH الخاص بك (يبحث MSYSGit عن Compare.exe).

كإجراء جيد، يجب إزالة جميع إعدادات Git الأخرى المتعلقة بأداة الدمج "araxis"، والتي كان من الممكن أن تقوم بتكوينها (خاصة، إذا اخترت هذا الاسم بالضبط، كما فعل بعض الأشخاص في هذه الصفحة).وهذا يشمل كل شيء تحت [mergetool "araxis"] قسم.تأكد من إزالتها من كافة التكوينات (النظام، والعامة، والمستودع)، وإلا فإنها قد تتداخل مع سلوك "الأداة الداخلية" العادي.

على أية حال، إذا كنت مهتمًا بكيفية قيام MSYSGit ببدء Araxis Merge، أو تتساءل عن أدوات الدمج الأخرى التي يدعمها خارج الصندوق، فإن المكان المناسب للبحث هو \share\git-gui\lib\mergetool.tcl البرنامج النصي في مجلد تثبيت MSYSGit الخاص بك.

ملاحظة.قد تتمكن من تجنب تعيين متغير بيئة PATH، عن طريق التكوين mergetool.araxis.path في .gitconfig.شخصياً، لم أكلف نفسي عناء القيام بذلك منذ ذلك الحين

  1. أستخدم Araxis Merge من سطر الأوامر على أي حال.
  2. تحديد مسار الدليل في .gitconfig (خاصة تلك التي تحبها "C:\Program Files\Araxis\Araxis Merge\", ، الذي يحتوي على مسافات) قد يكون من الصعب تنفيذه بشكل صحيح، نظرًا لأنه عرضة لمشكلات الشرطة المائلة العكسية/الشرطة المائلة للأمام، التي تصيب MSYSGit.

بس.كل ما سبق ينطبق على جعل Araxis أداة التوزيع الخاصة بك أيضًا.أي: تحتاج إلى إضافة

[diff]
    tool = araxis

وإزالة أي شيء آخر في [difftool "araxis"] القسم، إذا كان لديك في التكوين الخاص بك (على الرغم من ذلك، لا تنس إعداد PATH).

يمكنك محاولة متابعة البرنامج النصي المذكور في إجابتي حول diffMerge (لنظام التشغيل Windows) ومعرفة ما إذا كان يعمل.

يمكن التعبير عن المسار القابل للتنفيذ بشكل أفضل باستخدام:

#!/bin/sh

"C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"

إحدى الطرق التي وجدتها للقيام بذلك "ببساطة" هي التثبيت TortoiseGit وقم بتعيين أدوات الفرق / الدمج في خيارات TortoiseGit.
ومع ذلك، هذا لا يعالج المشكلة إذا كنت تريد الاختلاف عن سطر الأوامر.

منذ أن تم عضتي على اختلافات/دمجات git المخصصة، اعتقدت أنني سأحاول إصلاح هذا الأمر مرة واحدة وإلى الأبد.وصلت إلى النقطة التي بدأ فيها AraxisMerge، ولكن بدون عناوين علامات التبويب.لذلك سيتم ترك ذلك كتمرين للقارئ :)

الملاحظات والتعليقات:

  • لم يكن لدي AraxisMerge، لذا قمت بتنزيله وحصلت على ترخيص تقييم مجاني لمدة 30 يومًا لتجربته.يأتي هذا الإصدار (7.0 على ما يبدو) مزودًا بـ araxisgitdiff.exe، ويعمل الرابط الذي يحتوي على التعليمات التي ترسلها.لذلك سيكون هذا هو الخيار رقم 1:ترقية دمج araxis.
  • وبما أنني أعمل من CMD.EXE، فإن 'git diff HEAD HEAD^' لا يعمل.يجب الهروب من '^' إلى 'git diff HEAD "HEAD^"'.
  • بالنسبة لعملي الخاص، أستخدم kdiff3 كبديل مجاني لنظام التشغيل Windows والذي يعمل بشكل جيد إلى حد معقول (يساعد في دعمه افتراضيًا بواسطة git)

بدءًا من git-diff-driver.sh أعطاني نفس الخطأ.بعد تغيير البرنامج النصي ليحتوي على "صدى" فقط، لم يتغير هذا.لذا فإن الخطأ مستقل عن محتويات البرنامج النصي.

ثم قمت بإزالة الجزء '/bin' من .gitconfig، وبذلك يصبح السطر

external = "git-diff-driver.sh"

...وبدأ هذا العمل:لقد بدأ عملية الدمج، لكنه لم يفلت من الجزء '(الريبو)' بشكل صحيح.كحل بديل، عملت بدون العناوين باستخدام:

#!/bin/sh
"/c/Program Files/Araxis/Araxis Merge/compare.exe" -max "$2" "$5"

حظ سعيد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top