سؤال

لقد حاولت msysGit و جيت على Cygwin.سواء تعمل على ما يرام في حد ذاتها و كل تشغيل gitk و بوابة واجهة المستخدم الرسومية تماما.

الآن كيف هيك هل تكوين mergetool?(Vimdiff يعمل على Cygwin, ولكن يفضل أود شيئا قليلا أكثر سهولة على ويندوز المحبة زملاء العمل.)

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

المحلول

متابعة تشارلز بيلي الجواب ، جيت إعداد باستخدام p4merge (مجانا عبر منصة 3way دمج أداة);اختبار على msys بوابة (ويندوز) تثبيت:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

أو من windows cmd.exe شل الخط الثاني يصبح :

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

التغييرات (نسبة إلى تشارلز بايلي):

  • إضافة إلى العالمية من بوابة التكوين ، أيصالحة لجميع بوابة المشاريع الحالية
  • مخصصة أداة التكوين قيمة يقيم في "mergetool.[أداة].cmd" لا "دمج.[أداة].cmd" (سخيفة لي, قضيت ساعة استكشاف الأخطاء وإصلاحها لما جيت تبقى تشكو من عدم وجود أداة)
  • وأضاف التنصيص على جميع أسماء الملفات حتى الملفات ذات المساحات لا يزال يمكن العثور عليها عن طريق دمج أداة (أنا اختبرت هذا في msys جيت من Powershell)
  • ملاحظة بشكل افتراضي بالضرورة إضافة نصبها dir المسار, وبالتالي لا تحتاج إلى تحديد المسار الكامل إلى p4merge في الأمر

تحميل: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools


تحرير (Feb 2014)

كما أشار @غريغوري Pakosz, أحدث msys بوابة الآن "أصلا" يدعم p4merge (اختبار على 1.8.5.2.msysgit.0).

يمكنك عرض قائمة أدوات تشغيل:

git mergetool --tool-help

يجب أن نرى p4merge إما المتاحة أو صالح قائمة.إذا كان لا يرجى تحديث بوابة.

إذا p4merge كما تم إدراج المتاحة, في المسار و لديك فقط لتعيين دمج.أداة:

git config --global merge.tool p4merge

إذا كانت مدرجة صالح, عليك أن تحدد mergetool.p4merge.المسار بالإضافة إلى دمج.أداة:

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • ما سبق هو مثال على الطريق عندما p4merge تم تثبيت للمستخدم الحالي ، ليس على مستوى المنظومة (لا تتطلب حقوق المسؤول أو UAC الارتفاع)
  • على الرغم من أن ~ يجب أن التوسع الحالي في الدليل الرئيسي للمستخدم (حتى من الناحية النظرية يجب أن يكون المسار ~/AppData/Local/Perforce/p4merge.exe) هذا لم يعمل بالنسبة لي
  • والأفضل أن يكون من الاستفادة من بيئة متغيرة (على سبيل المثال $LOCALAPPDATA/Perforce/p4merge.exe), بوابة لا يبدو أن توسيع متغيرات البيئة على مسارات (إذا كنت تعرف كيفية الحصول على هذا العمل ، يرجى اسمحوا لي أن أعرف أو تحديث هذا الجواب)

نصائح أخرى

وتحديد وmergetool.p4merge.cmd لا تعمل بعد الآن منذ بدأت جيت في محاولة لدعم p4merge، انظر libexec / بوابة النواة / git-mergetool--lib.so نحن بحاجة فقط لتحديد المسار mergetool للبوابة، على سبيل المثال وp4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

وبعد ذلك سوف تنجح.

وأنا باستخدام بوابة المحمولة على ويندوز إكس بي (يعمل على علاج!)، وتحتاج إلى حل الصراع الذي جاء في المتفرعة. من كل عام واجهة المستخدم الرسومية راجعت، KDiff3 ثبت أن الأكثر شفافية للاستخدام.

ولكن وجدت تعليمات كنت بحاجة للحصول على انها تعمل في ويندوز في <لأ href = "http://www.blog.project13.pl/index.php/coding/1192/setup-git-on-windows- لاستخدام kdiff3 كما هو وله في mergetool / "يختلط =" noreferrer "> هذا بلوق وظيفة أو التعليمات التي تختلف قليلا عن المناهج الأخرى المذكورة هنا. فقد بلغت أساسا إلى إضافة هذه الأسطر إلى ملفي .gitconfig:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

العمل بشكل جيد الآن!

تحت Cygwin ، فقط الشيء الذي عملت بالنسبة لي هو ما يلي:

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

أيضا أحب أن إيقاف رسالة فورية عن difftool:

git config --global difftool.prompt false

وgit mergetool هو تماما شكلي بحيث يمكنك حد كبير اختار أداة المفضلة لديك.

والوثائق الكاملة هنا هو: HTTP: // www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

وباختصار، يمكنك تعيين mergetool الافتراضي من خلال وضع المستخدم التكوين merge.tool متغير.

إذا الأداة دمج هي واحدة من تلك المعتمدة أصلا من قبل أنه لديك فقط لتحديد mergetool.<tool>.path إلى المسار الكامل إلى أداة (استبدال <tool> من خلال ما قمت بتكوين merge.tool أن يكون.

وعلى خلاف ذلك، يمكنك تعيين mergetool.<tool>.cmd إلى قليلا من قذيفة إلى أن eval'ed في وقت التشغيل مع المتغيرات قذيفة $BASE, $LOCAL, $REMOTE, $MERGED لتعيين الملفات المناسبة. عليك أن تكون حذرا بعض الشيء مع الهروب سواء قمت بتحرير ملف التكوين مباشرة أو تعيين المتغير مع الأمر git config.

وشيء من هذا القبيل يجب أن تعطي نكهة ما يمكنك القيام به ( 'mymerge' هو أداة خيالية).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

وبمجرد إعداد أداة دمج المفضلة لديك، انها مجرد مسألة تشغيل git mergetool كلما كان لديك الصراعات لحلها.

وأداة p4merge من بالضروره هي أداة دمج بذاتها جيدة.

للا سبيل للمقارنة على ويندوز 7

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"

ويبدو أن أحدث إصدارات بوابة تدعم p4merge مباشرة، لذلك

git config --global merge.tool p4merge

يجب أن يكون كل ما تحتاجه، إذا p4merge.exe على المسار. لا حاجة لاقامة كمد أو المسار.

وكما أجبت هنا (و هنا و< وأ href = "https://stackoverflow.com/questions/161813/how-do-i-fix-merge-conflicts-in-git"> هنا )، mergetool غير الأمر إلى تكوين هذا. لالواجهة الرسومية لطيفة أوصي kdiff3 (GPL).

وكان لي لإسقاط خارج نقلا عن استخدام msysGit على ويندوز 7، وليس متأكدا من السبب.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'

إذا كنت تفعل ذلك من خلال سيغوين، قد تحتاج إلى استخدام cygpath:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge `cygpath -w $BASE` `cygpath -w $LOCAL` `cygpath -w $REMOTE` `cygpath -w $MERGED`'

وباه، وهذا <م> أخيرا عملت بالنسبة لي (ويندوز 7 + سيغوين + TortoiseMerge):

في. بوابة / التكوين:

cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")

وبفضل الملصقات السابقة لهذه المعلومة لاستخدام cygpath!

ويمكنني استخدام التطبيق يسمى ينمرغ ( http://winmerge.org/ ) معلومات من دليل على ( http://manual.winmerge.org/CommandLine.html )

وهذا هو السيناريو باش ط استخدام من التوجيه mergetool عبر .gitconfig

#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file

file1=$1
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\\.\nul' ] || [ ! -e "$file1" ]
    then 
       file1="/tmp/gitnull"
       `echo "">$file1`
fi
file2=$2
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\\.\nul' ] || [ ! -e "$file2" ]
    then 
       file2="/tmp/gitnull"
       `echo "">$file2`
fi
echo diff : $1 -- $2
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"

وأساسا حسابات باش لأنه عندما نتيجة للفرق في ملف فارغ ويخلق ملف مؤقت جديد في الموقع الصحيح.

وجدت طريقتين لتكوين "SourceGear DiffMerge"كما difftool و mergetool في جيثب ويندوز.

الأوامر التالية في موجه الأوامر سيتم تحديث الخاص بك .gitconfig لتكوين استخدام بوابة DiffMerge:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  \"$LOCAL\" \"$REMOTE\"'

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd  'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  -merge  -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'

[أو]

أضف الأسطر التالية إلى ملف .gitconfig.وينبغي أن يكون هذا الملف في الدليل الرئيسي الخاص بك في C:\Users\UserName:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"

[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"

وأنت قد تحتاج إلى إضافة هذه الخيارات أيضا:

git config --global merge.tool p4mergetool
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.p4mergetool.trustExitCode false
git config --global mergetool.keepBackup false

وأيضا، وأنا لا أعرف لماذا ولكن نقلا عن والقطع من الأشياء ميلان Gardian في الإجابة ثمل بالنسبة لي.

وإذا كان أي شخص يريد استخدام gvim كأداة فرق على تورتويز جت، ثم وهذا هو ما تحتاجه للدخول في إدخال النص لمسار إلى أداة فرق الخارجية:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"

على فكرة IntelliJ (المجتمع Edition) 3-طريقة بوابة mergetool التكوين في بيئة ويندوز (~/.gitconfig)

Cygwin

[mergetool "ideamerge"]
     cmd = C:/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
     tool = ideamerge

Msys

[mergetool "ideamerge"]
cmd = "/c/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
 tool = ideamerge

و ~/winpath.sh هو تحويل مسارات ويندوز على msys و هو مأخوذ من msys طريق تحويل السؤال على ستاكوفيرفلوو

#! /bin/sh                                                               

function wpath {                                                         
    if [ -z "$1" ]; then                                                 
        echo "$@"                                                        
    else                                                                 
        if [ -f "$1" ]; then                                             
            local dir=$(dirname "$1")                                    
            local fn=$(basename "$1")                                    
            echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\\|g';  
        else                                                             
            if [ -d "$1" ]; then                                         
                echo "$(cd "$1"; pwd -W)" | sed 's|/|\\|g';              
            else                                                         
                echo "$1" | sed 's|^/\(.\)/|\1:\\|g; s|/|\\|g';          
            fi                                                           
        fi                                                               
    fi                                                                   
}                                                                        

wpath "$@" 

لp4merge الإعداد، تثبيتها باستخدام تشوكولاتيي على النوافذ لكلا دمج وفرق، نلقي نظرة هنا: https://gist.github.com/CamW/88e95ea8d9f0786d746a

إذا كنت تواجه مشاكل في فتح p4merge من SourceTree تبدو لك ملف التكوين محلي يدعى على التهيئة ضمن MyRepo.git وحذف أي تكوين الدمج. في حالتي كان يحاول فتح أخلط الذي أنا إلغاء تثبيت فقط

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