क्या TortoiseMerge को Windows Git Bash के साथ difftool के रूप में इस्तेमाल किया जा सकता है?




tortoisegit git-diff (4)

क्लास मेलबर्न द्वारा शानदार जवाब! मुझे एक lotta समय बचाया। एक कमी है, रिपॉजिटरी में नई Added या Removed फाइलें difftool कमांड के निष्पादन के दौरान दिखाई नहीं देंगी। उनकी तुलना करने के लिए कुछ भी नहीं है! यहाँ मैंने इसके ऊपर क्या किया है: (मेरे सहकर्मी के answer से प्रेरित होकर)।

  1. $Home डाइरेक्टरी में empty.empty नाम की एक फ़ाइल बनाएँ (अपने बैश में start ~ )। और जैसा कि नाम से पता चलता है, इसे खाली रखें।
  2. निम्नलिखित सामग्री के साथ $Home/bin निर्देशिका में tortoisediff.sh नाम की एक और फ़ाइल बनाएँ

:

#!/bin/sh
# $LOCAL $REMOTE seem to be swapped
# $1 is $LOCAL
# $2 is $REMOTE

difftool='/c/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe'
NULL="/dev/null"
empty="C:/home/empty.empty"

if [ "$1" == "$NULL" ]; then
    echo "Added: " "$2"
    "$difftool" /base:"$empty" /mine:"$2" /readonly:"$empty"
elif [ "$2" == "$NULL" ]; then
    echo 'Removed: ' "$1"
    "$difftool" /base:"$1" /readonly:"$1" /mine:"$empty"
else
    echo 'Modified' "$2"
    "$difftool" /base:"$1" /basename:"$1" /readonly:"$1" /mine:"$2" /minename:"$2"
fi

# Checkout https://tortoisegit.org/docs/tortoisegitmerge/tme-automation.html for more
  1. अपनी .gitconfig फ़ाइल (उत्तर की पंक्ति 11) को संशोधित करें

    cmd = tortoisediff.sh "$LOCAL" "$REMOTE"

अब यह सीधे आवेदन खोलने के बजाय tortoisediff.sh के लिए difftool संदर्भित करेगा।

  1. ध्यान रखें: आपको git add . चलाना होगा git add . इसके बाद git difftool --staged बजाय git difftool

मैं सिर्फ Git के साथ काम करना शुरू कर रहा हूं। मैं TortoiseMerge का उपयोग difftool और mergetool के रूप में करना चाहूंगा।

मेरे व्यक्तिगत उपयोगकर्ता निर्देशिका में मेरे .gtconfig में मेरे पास निम्न अनुभाग हैं। मैंने इस प्रश्न के लिए उपयोगकर्ता और रंग अनुभाग हटा दिए हैं।

[merge]
    tool = tortoisemerge
[mergetool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[diff]
    tool = tortoisemerge
[difftool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

अगर मैं Git Bash में tortoisemerge टाइप करता हूं तो यह लोड करता है। यह मार्ग पर जाना जाता है। लेकिन अगर मैं कमांड टाइप करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है।

Rich:mygittest (master *)
$ git difftool
error: 'tortoisemerge' can only be used to resolve merges
merge tool candidates: kompare emerge vimdiff
No known merge resolution program available.
external diff died, stopping at readme.txt.
Rich:mygittest (master *)
$ 

इस काम को करने के लिए मैं क्या नहीं समझ रहा हूँ? टोर्टोइसमेगर को टोर्टोइसेवएन के साथ स्थापित किया गया है।


ताकि रिक्त स्थान के साथ फ़ाइल नाम सही ढंग से संभाला जाए, आपको @ मेलबर्न के उत्तर की अंतिम पंक्ति को बदलना चाहिए

cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"

रिबासिंग करते समय, मैं दृढ़ता से $theirs और $mine स्विच करने की सलाह देता हूं, क्योंकि जब आप मर्ज और रीबेस-मर्ज करते हैं तो यह अलग होता है। यहा जांचिये:

Git में "हमारा" और "उनका" का सटीक अर्थ क्या है?

इसलिए, यदि आप मेरी तरह रिबेट करने के लिए केवल मेरिजेट का उपयोग करते हैं, तो:

[mergetool "tortoisemerge"]
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$LOCAL" -mine "$REMOTE" -merged "$MERGED"

[diff]
  tool = tortoisediff
[difftool]
  prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[mergetool "tortoisemerge"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

यह मेरे लिए काम किया, TortoiseMerge 1.6.7 (पोर्टेबल) का उपयोग करके





tortoisegitmerge