আমার পছন্দের ডিফ সরঞ্জাম / দর্শকের সাহায্যে আমি কীভাবে 'গিট ডিফ' আউটপুট দেখতে পারি?


754

আমি যখন টাইপ করি git diff, তখন আমার পছন্দসই ভিজ্যুয়াল ডিফ সরঞ্জাম (উইন্ডোজে সোর্সগিয়ার "বিচ্ছিন্ন") দিয়ে আউটপুটটি দেখতে চাই। এটি করার জন্য আমি গিটটি কীভাবে কনফিগার করব?


108
গিটের নতুন সংস্করণগুলিতে আপনি "গিট ডিফ্টল" ব্যবহার করতে পারেন। এটি একটি ভিজ্যুয়াল ডিফ প্রোগ্রাম খুলবে।
প্লেগহ্যামার

: নতুন স্ক্রিপ্ট difftool সম্বন্ধে আমি নিচে একটি উত্তর যোগ করেছেন stackoverflow.com/questions/255202/...
VonC


1
সংক্ষিপ্ত টিউটোরিয়ালটি আপনি এখানে পাবেন: নাথানহোড.এন.এইচও- টো
দিমিত্রি

5
গিট বাশে আপনার ভাণ্ডারে যান। প্রকার git config diff.tool winmerge। এটি লিখে কাজটি যাচাই করুন git difftool। প্রম্পট টাইপিং থেকে মুক্তি পান git config --global difftool.prompt false। আমি উইনমার্জের পরিবর্তে পি 4 ড্রামের প্রস্তাব দিই।
মাইকেল এস

উত্তর:


386

Git1.6.3 থেকে আপনি গিট ডিফ্টল স্ক্রিপ্টটি ব্যবহার করতে পারেন : আমার উত্তর নীচে দেখুন


এই নিবন্ধটি আপনাকে সাহায্য করবে হতে পারে । এখানে সেরা অংশগুলি রয়েছে:

বাহ্যিক ডিফ সরঞ্জামটি নির্দিষ্ট করার জন্য দুটি ভিন্ন উপায় রয়েছে।

প্রথমটি হ'ল GIT_EXTERNAL_DIFF ভেরিয়েবল সেট করে আপনি যে পদ্ধতিটি ব্যবহার করেছেন। তবে ভেরিয়েবলটি এক্সিকিউটেবলের পুরো পথে নির্দেশ করার কথা point তদুপরি, GIT_EXTERNAL_DIFF দ্বারা নির্ধারিত এক্সিকিউটেবলকে 7 টি আর্গুমেন্টের একটি নির্দিষ্ট সেট সহ কল ​​করা হবে:

path old-file old-hex old-mode new-file new-hex new-mode

যেহেতু বেশিরভাগ ডিফ সরঞ্জামগুলির জন্য আর্গুমেন্টগুলির একটি পৃথক ক্রম (এবং কেবলমাত্র কিছু) প্রয়োজন হবে, আপনাকে সম্ভবত এর পরিবর্তে একটি মোড়ক স্ক্রিপ্ট নির্দিষ্ট করতে হবে, যার ফলস্বরূপ আসল ডিফ সরঞ্জামটি কল করে।

দ্বিতীয় পদ্ধতিটি, যা আমি পছন্দ করি তা হ'ল "গিট কনফিগারেশন" এর মাধ্যমে বাহ্যিক ডিফ সরঞ্জামটি কনফিগার করা । আমি যা করেছি তা এখানে:

1) একটি র‍্যাপার স্ক্রিপ্ট "git-diff-wrapper.sh" তৈরি করুন যাতে এর মতো কিছু থাকে

-->8-(snip)--
#!/bin/sh

# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode

"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--

আপনি দেখতে পাচ্ছেন, কেবলমাত্র দ্বিতীয় ("পুরাতন-ফাইল") এবং পঞ্চম ("নতুন-ফাইল") যুক্তিগুলি ডিফ ডিভাইসে পাস করা হবে।

2) প্রকার

$ git config --global diff.external <path_to_wrapper_script>

কমান্ড প্রম্পটে, "git-diff-wrapper.sh" এর পথের পরিবর্তে, যাতে আপনার ~ / .gitconfig থাকে

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

মোড়ক স্ক্রিপ্ট এবং ডিফ সরঞ্জামের জন্য পাথ নির্দিষ্ট করার জন্য সঠিক বাক্য গঠনটি ব্যবহার করতে ভুলবেন না, যেমন ব্যাকস্ল্যাশের পরিবর্তে ফরোয়ার্ড স্ল্যাশ ব্যবহার করুন। আমার ক্ষেত্রে, আমি আছে

[diff]
    external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"

ইন .gitconfig এবং

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

মোড়ক স্ক্রিপ্ট এ। "বিড়াল" এর পিছনে মন!

(আমি মনে করি '' | cat'কেবলমাত্র এমন কিছু প্রোগ্রামের জন্য প্রয়োজন যা সঠিক বা সামঞ্জস্যপূর্ণ রিটার্নের স্থিতি ফিরিয়ে নাও দিতে পারে dif আপনার বিবিধ সরঞ্জামটিতে সুস্পষ্ট রিটার্নের স্থিতি থাকলে আপনি চলন্ত বিড়াল ছাড়া চেষ্টা করতে চাইতে পারেন)

( ডায়োমিডিস স্পিনেলিস মন্তব্যগুলিতে যোগ করেছেন :

catকমান্ড প্রয়োজন বোধ করা হয়, কারণ diff(1), একটি ত্রুটি কোডের মাধ্যমে ডিফল্ট প্রস্থানের দ্বারা যদি ফাইল পৃথক।
গিট আশা করে যে বাহ্যিক ডিফ প্রোগ্রামটি যদি ত্রুটি কোডের সাথে প্রস্থান করে তবেই যদি প্রকৃত ত্রুটি ঘটে থাকে, উদাহরণস্বরূপ যদি এটি মেমরির বাইরে চলে যায়।
আউটপুট বংশীধ্বনিতুল্য দ্বারা gitকরা catনন-জিরো ত্রুটি কোড ছদ্মবেশী করা হয়।
আরও দক্ষতার সাথে, প্রোগ্রামটি exit0 এবং যুক্তির সাথে কেবল চালানো যেতে পারে ))


এটি (উপরে বর্ণিত নিবন্ধটি) হ'ল কনফিগারেশন ফাইলের মাধ্যমে সংজ্ঞায়িত বাহ্যিক সরঞ্জামের জন্য তত্ত্ব (পরিবেশের ভেরিয়েবলের মাধ্যমে নয় ) is
অনুশীলনে (এখনও বাহ্যিক সরঞ্জামের কনফিগার ফাইল সংজ্ঞা জন্য), আপনি উল্লেখ করতে পারেন:


1
আহ, আমি বাহ্যিক ডিফ প্রোগ্রামটি সেট করেছিলাম তবে 7 টি যুক্তি সম্পর্কে জানতাম না, ধন্যবাদ।
ব্যবহারকারী 3891

4
কুডোস ... এটি খুব সহজ। আমি এটি "ওপেনডিফ" দিয়ে সেট আপ করেছি (যা ম্যাক ওএস এক্স এর অধীনে স্লিক এক্সকোড ফাইলমর্জি ইউটিলিটি চালু করে)।
রায়ান দেলুচি

@ রায়ান: এটি দুর্দান্ত: আপনি কি এই উত্তরটিতে বিস্তারিত "ডিফএক্সটার্নাল" সেটিংস ব্যবহার করেছেন বা আমার দ্বিতীয় উত্তরের নীচে "গিট ডিফ্টল"?
ভনসি

ফ্যান্টাস্টিক! আপনাকে ধন্যবাদ, ডিফমার্জ এবং ওপেন্ডিফ উভয়ই চেষ্টা করে দেখেছি; উভয় বেশ ভাল কাজ।
vfilby

2
সুতরাং গিট একটি ভিন্ন প্রোগ্রামে 7 টি আর্গুমেন্ট প্রেরণ করে? গিট সম্পর্কে আমি যত বেশি শিখি, তত বেশি অনুভব করি যে এটি একজন ব্যক্তির জন্য তৈরি হয়েছিল: মূল প্রোগ্রামার। এই ডিভিসি আরও চকচকে খেলনার মতো মনে হচ্ছে যা বেশি কিছু করে না।
সি জনসন

211

উপরের আমার পূর্ববর্তী "ডিফএফটার্নাল" কনফিগার উত্তরটি সম্পূর্ণ করতে :

জাকুব দ্বারা উল্লিখিত হিসাবে , গিট 1.6.3 গিট ডিফ্টলটি প্রবর্তন করেছে , মূলত ২০০৮ সালের সেপ্টেম্বরে প্রস্তাবিত:

ব্যবহার = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
( --extcmdএই উত্তরের শেষ অংশে দেখুন )

$LOCALপ্রারম্ভিক সংস্করণ থেকে ফাইলের $REMOTEবিষয়বস্তু রয়েছে এবং সমাপ্তি পুনর্বিবেচনার মধ্যে ফাইলের বিষয়বস্তু রয়েছে।
$BASEদুয়ারে ফাইলের বিষয়বস্তু রয়েছে

এটি মূলত git-mergetoolগিট সূচক / ওয়ার্কট্রিতে পরিচালনা করার জন্য সংশোধিত।

এই স্ক্রিপ্টের জন্য স্বাভাবিক ব্যবহারের ক্ষেত্রে যখন আপনি হয় মঞ্চস্থ বা unstaged পরিবর্তিত করে এবং (যেমন একটি পার্শ্ব দ্বারা প্রান্তের পরিবর্তন ভিউয়ার পরিবর্তন দেখতে চাই করেছি xxdiff, tkdiff, ইত্যাদি)।

git difftool [<filename>*]

আরেকটি ব্যবহারের ক্ষেত্রে হ'ল আপনি যখন একই তথ্য দেখতে চান তবে স্বেচ্ছাসেবী কমিটের সাথে তুলনা করছেন (এটি সেই অংশ যেখানে রেভারগ পার্সিং আরও ভাল হতে পারে)

git difftool --start=HEAD^ --end=HEAD [-- <filename>*]

সর্বশেষ ব্যবহারের ক্ষেত্রে হ'ল আপনি যখন নিজের বর্তমান ওয়ার্কট্রিটিকে হেড ব্যতীত অন্য কোনও সাথে তুলনা করতে চান (যেমন ট্যাগ)

git difftool --commit=v1.0.0 [-- <filename>*]

দ্রষ্টব্য: গিট 2.5 থেকে যেহেতু git config diff.tool winmergeযথেষ্ট!
" গিট মার্জেটুল উইনমার্জ " দেখুন

এবং গিট ১.7.১১ থেকে , আপনার কাছে বিকল্প --dir-diffরয়েছে যাতে বাহ্যিক ডিফ সরঞ্জামগুলি স্পোন করতে পারে যা একবারে দু'টি অস্থায়ী ডিরেক্টরি স্থাপনের পরে দুটি ডিরেক্টরি হায়ারার্কিগুলির তুলনা করতে পারে, পরিবর্তে একটি ফাইল জুড়ে একবার বাহ্যিক সরঞ্জামের উদাহরণ চালানোর পরিবর্তে।


গিট 2.5 এর আগে:

difftoolআপনার কাস্টম ডিফ সরঞ্জাম দ্বারা কনফিগার করার জন্য ব্যবহারিক ক্ষেত্রে :

C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false

আপনার প্যাথের ডিরেক্টরি অংশে উইনরমার.শ সংরক্ষণ করা হয়েছে:

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"

আপনার যদি অন্য একটি সরঞ্জাম (কেডিআইফ 3, পি 4ডিফ, ...) থাকে তবে অন্য শেল স্ক্রিপ্ট এবং উপযুক্ত difftool.myDiffTool.cmdকনফিগারেশন নির্দেশিকা তৈরি করুন।
তারপরে আপনি diff.toolকনফিগার করে সহজেই সরঞ্জামগুলিতে স্যুইচ করতে পারেন ।

অন্যান্য বিবরণ যুক্ত করার জন্য আপনার কাছে ডেভের এই ব্লগ এন্ট্রিও রয়েছে
(বা বিকল্পগুলির জন্য এই প্রশ্নwinmergeu )

এই সেটিংটির সাথে আগ্রহটি হ'ল winmerge.shস্ক্রিপ্ট : বিশেষ কেসগুলি বিবেচনায় নিতে আপনি এটি কাস্টমাইজ করতে পারেন।

উদাহরণস্বরূপ দেখুন ডেভিড মার্বেল এর নিচে উত্তর একটি উদাহরণ যা পুলিশ সঙ্গে জন্য:

  • উত্স বা গন্তব্য হয় নতুন ফাইল
  • উত্স বা গন্তব্য হয় ফাইল সরানো

কেম ম্যাসন তাঁর উত্তরে যেমন উল্লেখ করেছেন , আপনি বিকল্পটি ব্যবহার করে যেকোন মোড়ক এড়াতে--extcmd পারবেন :

--extcmd=<command>

ভিন্নতা দেখার জন্য একটি কাস্টম কমান্ড উল্লেখ করুন। git-difftoolকনফিগার করা ডিফল্টগুলিকে উপেক্ষা করে এবং $command $LOCAL $REMOTEএই বিকল্পটি নির্দিষ্ট করা হলে চলে runs

উদাহরণস্বরূপ, এটি gitkকোনও diffসরঞ্জাম চালাতে / ব্যবহার করতে সক্ষম


11
তাদের "" এবং "" রোধ থেকে বাঁচাতে আমাকে $ লোকাল এবং $ রিমোটের জন্য পালাতে হয়েছিল। আমি গিট কনফিগারেশন - globla difftool.win مسئلو.cmd বলতে "উইন্ডোজ.শ \" \ OC স্থানীয় \ "\" \ EM রিমোট \ "" বলতে সম্পাদনা করব
কার্লোস রেনডন

এছাড়াও, কীভাবে এই প্রকল্পে কাজ করার জন্য -s বিকল্পটি (একটি উইনমার্ড উইন্ডোতে বিভিন্ন ডিফগুলি খুলুন) পাওয়ার কোনও ধারণা?
কার্লোস রেন্ডন

1
@Carlos: ফ্রাঙ্ক (উপরে মন্তব্য দেখুন) আপনি তাকান করতে চেয়েছিলেন stackoverflow.com/questions/1220309/... (এক winmerge উইন্ডোতে বিভিন্ন diffs খোলার জন্য)
VonC

1
--start=এবং --end=অপশন v1.7.11 মধ্যে স্বীকৃত হয় না
মাইকেল

1
@SteveChambers হ্যাঁ, আমি এটা উল্লেখ stackoverflow.com/a/10879804/6309 । আমি এই উত্তরটি সম্পাদনা করব।
ভোনসি

110

প্রশ্নের উত্তর দেওয়ার চেতনায় যা জিজ্ঞাসা করা থেকে কিছুটা আলাদা। এই সমাধান চেষ্টা করুন:

$ meld my_project_using_git

ফিল্ড গিটটি বোঝে এবং সাম্প্রতিক পরিবর্তনের চারদিকে নেভিগেট সরবরাহ করে।


17
এটি দুর্দান্ত, এর meld .চেয়ে টাইপ করা সহজ git difftoolএবং পরিবর্তিত ফাইলগুলি ধারাবাহিকভাবে দেখতে হবে। এবং এটি মার্কুরিয়াল hg vdiffপ্লাগইনের অনেক কাছাকাছি ।
টম

6
এছাড়াও, meld .কারও আগ্রহী হওয়ার ক্ষেত্রে মারকুরিয়াল এবং সাবভারশন প্রকল্পগুলিতেও কাজ করে।
টম

হুম, যখন আমি এটি সম্পাদিত ফাইলগুলির তালিকা প্রদর্শন করি। আমি যখন তাদের একটিতে ক্লিক করি বা 'তুলনা' করি তখন এটি পৃথক ট্যাবে একা খোলে। আমি কীভাবে ভিন্নতা পাই?
Misiu_mp

@ মিসিউ_এমপি, আমি এটি চেষ্টা করেছি, পরিবর্তিত ফাইলগুলিতে ক্লিক করার পরে এটি ভিন্নতা (পুরানো ফাইলের পাশাপাশি পরিবর্তিত ফাইল) দেখায়।
db42

এটি কোন সংস্করণে যুক্ত হয়েছিল? এটি মেল্ড সংস্করণে কাজ করে বলে মনে হচ্ছে না 1.1.5
মার্ক বুথ

41

নতুন গিট ডিফ্টল সহ , এটি আপনার .gitconfig ফাইলে যুক্ত করার মতই সহজ :

[diff]
    tool = any-name
[difftool "any-name"]
    cmd = "\"C:/path/to/my/ext/diff.exe\" \"$LOCAL\" \"$REMOTE\""

Ptionচ্ছিকভাবে, যোগ করুন:

[difftool]
    prompt = false

বিচ্ছিন্নতাও পরীক্ষা করে দেখুন , সিরিয়ালটিতে প্রতিটি খোলার বিরক্তিকর (আইএমও) ডিফল্ট পৃথক আচরণ প্রসারিত করার জন্য আমি লিখেছিলাম একটি সাধারণ স্ক্রিপ্ট।

উইন্ডোজে গ্লোবাল .gitconfig রয়েছে %USERPROFILE%\.gitconfig


1
স্থানীয় কী এবং দূরবর্তী কী?
সি জনসন

3
মোড়ক স্ক্রিপ্টের প্রয়োজন হয় না এমন পদ্ধতির জন্য +1
hewজেলেট 5

@ সিজনসন: যথাযথ মূল ফাইল এবং সম্পাদিত ফাইলের পথ।
জেলেট

: যদি ব্লগ-লিঙ্ক ডাইস, এখানে সংযুক্ত রয়েছে, তাই উত্তর stackoverflow.com/a/1291578/321973
Tobias Kienzler

1
@ সিজনসন: OC স্থানীয় সর্বদা সর্বশেষতম প্রতিশ্রুতি। তবে EM REMOTE সামঞ্জস্যপূর্ণ নয়। স্থানীয় স্যান্ডবক্সের পরিবর্তনের দিকে তাকানোর সময় এটি বর্তমান / সম্পাদিত ফাইল, তবে historicalতিহাসিক প্রতিশ্রুতি আলাদা করার সময় এটি পিতামাতার প্রতিশ্রুতিবদ্ধ। আইওডো সাধারণ পার্থক্যের জন্য $ স্থানীয় = পুরানো এবং EM রিমোট = নতুন। Historicalতিহাসিক ক্ষেত্রে, $ LOCAL = আরও নতুন এবং EM REMOTE = পুরানো।
গ্রেঞ্জার

40

গিট সংস্করণ ১.6.৩ থেকে " গিট ডিফ্টল " রয়েছে যা আপনি আপনার প্রিয় গ্রাফিকাল ডিফ সরঞ্জামটি ব্যবহার করতে কনফিগার করতে পারেন। বর্তমানে সমর্থিত আউট-অফ-বক্স হয় kdiff3, kompare, tkdiff, মেশানো, xxdiff, উত্থান, vimdiff, gvimdiff, ecmerge, বিকীর্ণ এবং opendiff ; আপনি যে সরঞ্জামটি ব্যবহার করতে চান তা যদি এই তালিকায় না থাকে তবে আপনি সর্বদা ' difftool.<tool>.cmd' কনফিগারেশন বিকল্পটি ব্যবহার করতে পারেন ।

"গিট ডিফ্টল" একই বিকল্পগুলি "গিট ডিফ" হিসাবে গ্রহণ করে।


1
আরাক্সিস মার্জটিও কনফিগার করা আছে। araxis.com/ جهاز
gamegaMan

8
উদাহরণস্বরূপ ব্যবহার:git difftool -t kdiff3 HEAD
ইমানাটন

24

আমার এটার সাথে একটি যোগ আছে। আমি নিয়মিত একটি ডিফ অ্যাপ্লিকেশন ব্যবহার করতে চাই যা ডিফল্ট সরঞ্জামগুলির মধ্যে (যেমন ক্যালিডোস্কোপ) হিসাবে সমর্থিত নয়

git difftool -t

আমি ডিফল্টটিকে diffনিয়মিত কমান্ড লাইন হতে চাই, সুতরাং GIT_EXTERNAL_DIFFভেরিয়েবল নির্ধারণ করা কোনও বিকল্প নয়।

আপনি diffএই আদেশ দিয়ে ওয়ান অফ হিসাবে একটি সালিসী অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন :

git difftool --extcmd=/usr/bin/ksdiff

এটি সুনির্দিষ্টভাবে 2 টি ফাইলকে আপনি যে কমান্ডটি নির্দিষ্ট করেছেন তাতে পাস করে, সুতরাং আপনার সম্ভবত একটি মোড়কের দরকার নেই।


1
ভাল কথা: কেউ এখনও সেই --extcmdবিকল্পটি উল্লেখ করেনি । +1 টি। আমি আমার উত্তরে এটি অন্তর্ভুক্ত করেছি।
ভোনসি

19

ফাইল অপসারণ এবং সংযোজনগুলি মোকাবেলা করার জন্য ভনকের উত্তরের ভিত্তিতে নিম্নলিখিত কমান্ডগুলি এবং স্ক্রিপ্টগুলি ব্যবহার করুন:

> git config --global diff.tool winmerge
> git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\" \"$BASE\""
> git config --global difftool.prompt false

এটি আপনার বিশ্বব্যাপী রাখার মতোই .gitconfig:

[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = winmerge.bat "$LOCAL" "$REMOTE" "$BASE"
[difftool]
    prompt = false

তারপরে নিম্নলিখিতগুলিতে রাখুন winmerge.shযা অবশ্যই আপনার পথে থাকবে:

#!/bin/sh
NULL="/dev/null"
if [ "$2" = "$NULL" ] ; then
    echo "removed: $3"
elif [ "$1" = "$NULL" ] ; then
    echo "added: $3"
else
    echo "changed: $3"
    "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$1" "$2"
fi

winmerge.shস্ক্রিপ্টে দুর্দান্ত সংযোজন । +1 টি। আমি আপনার উত্তর লিঙ্ক আমার উত্তর আপডেট করেছি
ভোনসি

1
winmerge.batদ্বিতীয় স্নিপেটে হওয়া উচিতwinmerge.sh
বার্তোসকেপিপি

আপনি কি অনেক সরঞ্জামের জন্য এটি তৈরি করতে পারেন? এবং ফাইল এক্সটেনশন দ্বারা তাদের সহযোগী?
ইয়ুসার

12

উইন্ডোজ / এমএসএস গিটের জন্য সমাধান

উত্তরগুলি পড়ার পরে, আমি একটি সহজ উপায় আবিষ্কার করেছি যাতে কেবল একটি ফাইল পরিবর্তন করা জড়িত।

  1. 2 এবং 5 টি যুক্তি সহ আপনার বিচ্ছিন্ন প্রোগ্রামটি শুরু করতে একটি ব্যাচ ফাইল তৈরি করুন with (এটি যদি আপনি না জানেন তবে এটি সি: \ উইন্ডোতে রেখে দিন)। এটিকে কল করুন, উদাহরণস্বরূপ, "gitdiff.bat"। খনিটি হ'ল:

    @echo off
    REM This is gitdiff.bat
    "C:\Program Files\WinMerge\WinMergeU.exe" %2 %5
    
  2. আপনার ব্যাচ ফাইলে নির্দেশ করতে পরিবেশের পরিবর্তনশীল সেট করুন। উদাহরণস্বরূপ: GIT_EXTERNAL_DIFF=gitdiff.bat। বা টাইপ করে পাওয়ারশেলের মাধ্যমে git config --global diff.external gitdiff.bat

    কোট ব্যবহার না করা বা কোনও পথের তথ্য নির্দিষ্ট করা গুরুত্বপূর্ণ, অন্যথায় এটি কাজ করবে না। এজন্য gitdiff.bat অবশ্যই আপনার পথে থাকবে।

এখন যখন আপনি "গিট ডিফ" টাইপ করেন, এটি আপনার বাহ্যিক ডিফ ভিউয়ারকে অনুরোধ করবে।


1
+1 (যদি আমি পারতাম +10।) এটি সত্যিই সবচেয়ে সহজ সমাধান। আমি গৃহীত উত্তরের সাথে কয়েক ঘন্টা লড়াই করেছি এবং অবশেষে ছেড়ে দিয়েছি (আমার কিছু সমস্যা সম্ভবত বিদ্যুতের মাধ্যমে গিট চালানোর সাথে সম্পর্কিত ছিল ...) তবে, আমি পরিবেশের পরিবর্তনশীল git config --global diff.external winmerge.cmdসেট করার পরিবর্তে ব্যবহার করেছি GIT_EXTERNAL_DIFF, এবং এটি সমানভাবে ভাল কাজ করে।
ক্রিস্টোফার লেটে

এই সমাধান সহ কয়েকটি সমস্যা: 1. নতুন ফাইলগুলির জন্য কাজ করে না। উইনমার্গ আমাকে তুলনা করার জন্য একটি দ্বিতীয় ফাইল প্রবেশ করতে বলেছে। ২. আপনি বর্তমান উইনমার্জ উইন্ডোটি বন্ধ করার পরে পরবর্তী ফাইলটির তুলনা করার উইন্ডোটি কেবল তখনই খোলে, একই সাথে সমস্ত ফাইল দেখার সহজ উপায় নেই।
যিশু এইচ

9

আপনি cygwin মাধ্যমে এই কাজ করছেন, তাহলে আপনি ব্যবহার করতে হতে পারে cygpath :

$ git config difftool.bc3.cmd "git-diff-bcomp-wrapper.sh \$LOCAL \$REMOTE"
$ cat git-diff-bcomp-wrapper.sh
#!/bin/sh
"c:/Program Files (x86)/Beyond Compare 3/BComp.exe" `cygpath -w $1` `cygpath -w $2`

কিছু কারণে, "বিসি 3" ব্যবহার করা এখন আমার পক্ষে কাজ করছে না, তবে আমি যদি এর পরিবর্তে "এর বাইরে" ব্যবহার করি তবে এটি ঠিক আছে।
ইডব্রি

9

কিছু অন্যান্য বাহ্যিক ডিফ সরঞ্জামগুলি দেখার পরে আমি দেখতে পেলাম যে diffইন্টেলিজ আইডিইএর (এবং অ্যান্ড্রয়েড স্টুডিও) ভিউটি আমার পক্ষে সেরা।

পদক্ষেপ 1 - কমান্ড লাইন থেকে চালানোর জন্য ইন্টেলিজ আইডিইএ সেটআপ করুন

আপনি আপনার পরিবর্তন হাতিয়ার হিসেবে IntelliJ আইডিয়া ব্যবহার করতে চান তাহলে আপনাকে প্রথমে সেটআপ IntelliJ আইডিয়া কমান্ড লাইন নির্দেশাবলী অনুসরণ থেকেই চলবে করা উচিত এখানে :

ম্যাকোস বা ইউনিক্স-এ:

  1. নিশ্চিত করুন যে ইন্টেলিজ আইডিইএ চলছে।
  2. প্রধান মেনুতে, চয়ন করুন Tools | Create Command-line Launcher। লঞ্চার স্ক্রিপ্টের প্রস্তাবিত পথ এবং নাম সহ ডায়ালগ বক্সটি তৈরি করুন লঞ্চার স্ক্রিপ্টটি খোলে। আপনি ডিফল্ট গ্রহণ করতে পারেন, বা আপনার নিজের পথ নির্দিষ্ট করতে পারেন। এটি পরে নোটিশ করুন, যেমন আপনার এটি পরে প্রয়োজন হবে। ইন্টেলিজ আইডিইএর বাইরে, আপনার পথে লঞ্চার স্ক্রিপ্টের পাথ এবং নাম যুক্ত করুন।

উইন্ডোজে:

  1. পাথ সিস্টেম এনভায়রনমেন্টে চলকটিতে নির্বাহযোগ্য ইন্টেলিজ আইডিইএর অবস্থান নির্দিষ্ট করুন। এই ক্ষেত্রে, আপনি কোনও ডিরেক্টরি থেকে ইন্টেলিজ আইডিইএ এক্সিকিউটেবল এবং অন্যান্য ইন্টেলিজ আইডিইএ কমান্ড শুরু করতে সক্ষম হবেন।

পদক্ষেপ 2 - ইন্টেলিজ আইডিইএকে ডিফ্টল হিসাবে ব্যবহার করতে গিটটি কনফিগার করুন

এই ব্লগ পোস্টে নির্দেশাবলী অনুসরণ :

সজোরে আঘাত

export INTELLIJ_HOME /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS
PATH=$IDEA_HOME $PATH

মাছ

set INTELLIJ_HOME /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS
set PATH $INTELLIJ_HOME $PATH

এখন আপনার গিট কনফিগারেশনে নিম্নলিখিতগুলি যুক্ত করুন:

[merge]
   tool = intellij
[mergetool "intellij"]
   cmd = idea merge $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") $(cd $(dirname "$BASE") && pwd)/$(basename "$BASE") $(cd $(dirname "$MERGED") && pwd)/$(basename "$MERGED")
   trustExitCode = true
[diff]
   tool = intellij
[difftool "intellij"]
   cmd = idea diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE")

আপনার সাথে চেষ্টা করে দেখতে পারেন git difftoolঅথবাgit difftool HEAD~1


8

এটি উইন্ডোজ on এ আমার জন্য কাজ করে inter মধ্যবর্তী শ স্ক্রিপ্টগুলির জন্য কোনও প্রয়োজন নেই

.gitconfig এর বিষয়বস্তু:

    [diff]
      tool = kdiff3

    [difftool]
       prompt = false

    [difftool "kdiff3"]
      path = C:/Program Files (x86)/KDiff3/kdiff3.exe
      cmd = "$LOCAL" "$REMOTE"

আপনি কি আপনার মার্ডিটুল হিসাবে kdiff3 সংজ্ঞায়িত করেছেন? আপনার গিটকনফিগের সেই অংশটি ভাগ করে দেওয়ার মন যদি তাই হয়?
ব্লুং

2
ধন্যবাদ। এটি পুরোপুরি আমার জন্য কাজ করে নি কিন্তু এটা কাজ করেনি যখন আমি মুছে pathএবং পরিবর্তন cmdকরার জন্য"\"C:/Program Files (x86)/KDiff3/kdiff3.exe\" \"$LOCAL\" \"$REMOTE\""
স্টিভ চেম্বারস

7

উপরের দুর্দান্ত উত্তরের একটি সংক্ষিপ্তসার:

git difftool --tool-help
git config --global diff.tool <chosen tool>
git config --global --add difftool.prompt false

তারপরে এটি টাইপ করে ব্যবহার করুন (allyচ্ছিকভাবে ফাইলের নামও নির্দিষ্ট করে):

git difftool

6

ভূমিকা

রেফারেন্সের জন্য আমি ভনসির উত্তরের সাথে আমার প্রকরণটি অন্তর্ভুক্ত করতে চাই। মনে রাখবেন যে আমি গিটের MSys সংস্করণটি (এই সময়ে 1.6.0.2) ব্যবহার করছি, পরিবর্তিত PATH সহ এবং গিট নিজেই পাওয়ারশেল (বা সেমিডি.এক্সেই) থেকে চালাচ্ছি, বাশ শেলটি নয়।

আমি একটি নতুন কমান্ড প্রবর্তন gitdiff,। এই কমান্ডটি চালানো আপনার অস্থায়ীভাবে git diffআপনার পছন্দের ভিজ্যুয়াল ডিফ প্রোগ্রামটি ব্যবহার করতে পুনঃনির্দেশ করে (ভোনসি এর সমাধানের বিপরীতে যা স্থায়ীভাবে এটি করে)। এটি আমাকে ডিফল্ট গিট ডিফ কার্যকারিতা ( git diff) পাশাপাশি ভিজ্যুয়াল ডিফ কার্যকারিতা ( gitdiff) উভয়ই পেতে দেয় । উভয় কমান্ড একই প্যারামিটার গ্রহণ করে, উদাহরণস্বরূপ কোনও নির্দিষ্ট ফাইলটিতে দৃশ্যত পৃথক পরিবর্তন আপনি টাইপ করতে পারেন

gitdiff path/file.txt

সেটআপ

নোটটি যে $GitInstallগিটটি ইনস্টল করা আছে সেই ডিরেক্টরিতে স্থানধারক হিসাবে ব্যবহৃত হয়।

  1. একটি নতুন ফাইল তৈরি করুন, $GitInstall\cmd\gitdiff.cmd

    @echo off
    setlocal
    for /F "delims=" %%I in ("%~dp0..") do @set path=%%~fI\bin;%%~fI\mingw\bin;%PATH%
    if "%HOME%"=="" @set HOME=%USERPROFILE%
    set GIT_EXTERNAL_DIFF=git-diff-visual.cmd
    set GIT_PAGER=cat
    git diff %*
    endlocal
    
  2. একটি নতুন ফাইল তৈরি করুন $GitInstall\bin\git-diff-visual.cmd( [visual_diff_exe]আপনার পছন্দের বিভিন্ন প্রোগ্রামের জন্য পুরো স্থান সহ স্থানধারককে প্রতিস্থাপন )

    @echo off
    rem diff is called by git with 7 parameters:
    rem path old-file old-hex old-mode new-file new-hex new-mode
    echo Diffing "%5"
    "[visual_diff_exe]" "%2" "%5"
    exit 0
    
  3. আপনি এখন সম্পন্ন। gitdiffগিট সংগ্রহস্থলের মধ্যে থেকে চালানো এখন পরিবর্তিত প্রতিটি ফাইলের জন্য আপনার ভিজ্যুয়াল ডিফ প্রোগ্রামটি গ্রহণ করা উচিত।


6

এখানে একটি ব্যাচ ফাইল যা উইন্ডোজের জন্য কাজ করে - ডিফল্ট লোকেশনে ডিফফর্মকে ইনস্টল করে ধরে নেয়, এক্স 64 পরিচালনা করে, প্রয়োজনীয় হিসাবে ব্যাকস্ল্যাশ প্রতিস্থাপনের জন্য এগিয়ে যায় এবং নিজেই ইনস্টল করার ক্ষমতা রাখে। আপনার প্রিয় ডিফ প্রোগ্রামটির সাথে ডিফফর্মকে প্রতিস্থাপন করা সহজ হওয়া উচিত।

স্থাপন করা:

gitvdiff --install 

gitvdiff.bat:

@echo off

REM ---- Install? ----
REM To install, run gitvdiff --install

if %1==--install goto install



REM ---- Find DiffMerge ----

if DEFINED ProgramFiles^(x86^) (
    Set DIFF="%ProgramFiles(x86)%\SourceGear\DiffMerge\DiffMerge.exe"
) else (
    Set DIFF="%ProgramFiles%\SourceGear\DiffMerge\DiffMerge.exe"
)



REM ---- Switch forward slashes to back slashes ----

set oldW=%2
set oldW=%oldW:/=\%
set newW=%5
set newW=%newW:/=\%


REM ---- Launch DiffMerge ----

%DIFF% /title1="Old Version" %oldW% /title2="New Version" %newW%

goto :EOF



REM ---- Install ----
:install
set selfL=%~dpnx0
set selfL=%selfL:\=/%
@echo on
git config --global diff.external %selfL%
@echo off


:EOF

দুর্দান্ত স্ক্রিপ্ট, এটি আমাকে ডিফমার্জ কমান্ড দেখার সমস্যাটি বাঁচিয়েছে। কোট ব্যবহার করতে আপনি ইনস্টল লাইনটি সংশোধন করতে চাইতে পারেন - আমার মেশিনে আমার সমস্যা হয়েছিল: "% 1" == "- ইনস্টল"।
মারিও

6

আপনি যদি ম্যাকে থাকেন এবং এক্সকোড থাকে তবে আপনার ফাইলমার্জ ইনস্টল করা আছে। টার্মিনাল কমান্ডটি খোলাখুলি, সুতরাং আপনি কেবল এটি করতে পারেনgit difftool -t opendiff


2
বিরক্তিকর অনুরোধগুলি এড়াতে -y বিকল্পটি ব্যবহার করুন। দুর্ভাগ্যক্রমে, গিটটি পরবর্তী পরিবর্তিত ফাইল সরবরাহ করার আগে ফাইলমর্জি ছাড়ার আগ পর্যন্ত অপেক্ষা করবে। একটি শটে তুলনা করে ডিরেক্টরি করতে -d বিকল্পটি ব্যবহার করুন।
miner49r

বিকল্পটি-টি-তে সম্পূর্ণ পাথ প্রয়োজন বলে মনে হচ্ছে। সম্ভবত গিট ডিফ্টল --extcmd = অপেনডিফ ব্যবহার করা ভাল better
ইয়ুসার

6

মেল্ড ইনস্টল করুন

 # apt-get install meld

তারপরে ডিফ্টল হিসাবে এটি চয়ন করুন

 $ git config --global diff.tool meld

যদি এটি কনসোল প্রকারে চালাতে চান তবে:

 $ git difftool

আপনি যদি গ্রাফিক মোডের প্রকারটি ব্যবহার করতে চান তবে:

 $ git mergetool

এবং আউটপুট হবে:

 'git mergetool' will now attempt to use one of the following tools:
 meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse
 diffmerge ecmerge p4merge araxis bc3 codecompare emerge vimdiff
 Merging:
 www/css/style.css
 www/js/controllers.js

 Normal merge conflict for 'www/css/style.css':
   {local}: modified file
   {remote}: modified file
 Hit return to start merge resolution tool (meld):

সুতরাং কেবল মেল্ড (ডিফল্ট) ব্যবহার করতে এন্টার টিপুন, এটি গ্রাফিক মোড খুলবে, যাদুটিকে সংরক্ষণ করবে এবং মেশানোটিকে সমাধান করবে এমন টিপুন। এখানেই শেষ


5

1.6.3 এর পূর্বে গিট সংস্করণগুলিতে কীভাবে একটি ডিফ ডিভাইস কনফিগার করতে হয় তার একটি লিনাক্স সংস্করণের জন্য (1.6.3 গিটকে পৃথকভাবে যুক্ত করেছেন) এটি দুর্দান্ত সংক্ষিপ্ত টিউটোরিয়াল,

সংক্ষেপে:

পদক্ষেপ 1: এটি আপনার .gitconfig এ যুক্ত করুন

[diff]
  external = git_diff_wrapper
[pager]
  diff =

পদক্ষেপ 2: গিট_ডিফ_রাপর নামে একটি ফাইল তৈরি করুন, এটি আপনার $ PATH এর কোথাও রেখে দিন

#!/bin/sh

vimdiff "$2" "$5"

4

ম্যাক ওএস এক্সে,

git difftool -t diffuse 

গিট ফোল্ডারে আমার জন্য কাজ করে। ছড়িয়ে পড়া ইনস্টল করার জন্য, কেউ পোর্ট ব্যবহার করতে পারে -

sudo port install diffuse

3

আপনি ব্যবহার করতে পারেন git difftool

উদাহরণস্বরূপ, যদি আপনি আছে মেশানো , আপনি branchs সম্পাদনা করতে পারেন masterএবং develদ্বারা:

git config --global diff.external meld
git difftool master..devel

3

এখানে অন্যান্য উত্তরগুলি থেকে নীচেরটি সংগ্রহ করা যেতে পারে তবে আমার পক্ষে এটি কঠিন, (অত্যধিক তথ্য), তাই এখানে tkdiff এর জন্য 'কেবল এটি টাইপ করুন':

git difftool --tool=tkdiff <path to the file to be diffed>

আপনি tkdiff এর জন্য আপনার প্রিয় ডিফিং সরঞ্জামটির এক্সিকিউটেবল নামটি প্রতিস্থাপন করতে পারেন। যতক্ষণ না (যেমন: টেকডিফ), (বা আপনার প্রিয় ডিফিং সরঞ্জাম) আপনার পাথ থাকে, এটি চালু করা হবে।


এটি সবচেয়ে সহজ এবং দ্রুততম উপায়।
জমির ফুজান

2

আমি অভিনব জিনিস এখানে চেষ্টা করেছি (tkdiff সহ) এবং আমার পক্ষে কিছুই কার্যকর হয়নি। তাই আমি নিম্নলিখিত স্ক্রিপ্ট লিখেছি, tkgitdiff। আমার যা করা দরকার তা তা করে।

$ cat tkgitdiff
#!/bin/sh

#
# tkdiff for git.
# Gives you the diff between HEAD and the current state of your file.
#

newfile=$1
git diff HEAD -- $newfile > /tmp/patch.dat
cp $newfile /tmp
savedPWD=$PWD
cd /tmp
patch -R $newfile < patch.dat
cd $savedPWD
tkdiff /tmp/$newfile $newfile

1

আমি উবুন্টুতে কম্পারে ব্যবহার করি:

sudo apt-get install kompare

দুটি শাখা তুলনা করতে:

git difftool -t kompare <my_branch> master

1

আমি এই বিটটি ~/.gitconfigদীর্ঘকাল ধরে ব্যবহার করছি :

[diff]
    external = ~/Dropbox/source/bash/git-meld

সহ git-meld:

#!/bin/bash
if [ "$DISPLAY" = "" ];
then
    diff $2 $5
else
    meld $2 $5
fi

তবে এখন আমি সবসময় গ্রাফিকাল পরিবেশে মেল্ড ব্যবহার করে ক্লান্ত হয়ে পড়েছিলাম এবং এই সেটআপটির সাথে সাধারণ পার্থক্যটি জিজ্ঞাসা করা তুচ্ছ নয়, তাই আমি এই দিকে চলে যাই:

[alias]
    v =  "!sh -c 'if [ $# -eq 0 ] ; then git difftool -y -t meld ; else git difftool -y $@ ; fi' -"

এই সেটআপটি দিয়ে, এই কাজের মতো জিনিসগুলি:

git v
git v --staged
git v -t kompare
git v --staged -t tkdiff

এবং আমি এখনও ভাল পুরানো রাখতে হবে git diff


0

আপনি যদি ফাইল টাইপের সাথে ইতিমধ্যে কোনও পৃথক সরঞ্জাম যুক্ত হয়ে পড়ে থাকেন (বলুন, কারণ আপনি টার্টোইজএসভিএন ইনস্টল করেছেন যা একটি পৃথক দর্শকের সাথে আসে) আপনি কেবলমাত্র git diff"টেম্প" ফাইলটিতে নিয়মিত আউটপুটটি পাইপ করতে পারেন , তবে কেবল ফাইলটি না জেনে সরাসরি খুলুন দর্শকের সম্পর্কে কিছু:

git diff > "~/temp.diff" && start "~/temp.diff"

এটি একটি বিশ্বব্যাপী উপন্যাস হিসাবে সেট করা আরও ভাল কাজ করে: git what

[alias]
    what = "!f() { git diff > "~/temp.diff" && start "~/temp.diff"; }; f"

0

আপনি যদি কমান্ড লাইনের জন্য না হন তবে আপনি যদি কচ্ছপ গিট ইনস্টল করেন তবে "ডিফ লেটার" বিকল্পের সাহায্যে একটি কচ্ছপ সাবমেনু পেতে একটি ফাইলটিতে ডান ক্লিক করতে পারেন।

আপনি যখন প্রথম ফাইলটিতে এটি নির্বাচন করেন আপনি তারপরে দ্বিতীয় ফাইলটিতে ডান ক্লিক করতে পারেন, কচ্ছপটি সাবমেনুতে যান এবং "ডিফের সাথে == আপনারফাইলে ==" নির্বাচন করুন এটি ফলাফলের জন্য কচ্ছপকে গিরি দেবে।


0

আপনি এক্সডি http://github.com/jiqingtang/xd চেষ্টা করতে চাইতে পারেন , যা জিআইটি / এসভিএন ডিফের জন্য জিইউআই র‌্যাপার। এটি নিজেই আলাদা ডিভাইস নয়। আপনি xdযখন চালনা করতে চান আপনি ছুটে যান git diffবা svn diffএটি আপনাকে ফাইলগুলির একটি তালিকা, একটি পূর্বরূপ উইন্ডো প্রদর্শন করবে এবং আপনি যে কোনও ডিফ সরঞ্জাম আনতে পারবেন, যার মধ্যে tkdiff, xxdiff, gvimdiff, emacs (edif), xemacs (edif), meld, বিচ্ছুরিত, কম্পারে এবং কেডিফ 3। আপনি যে কোনও কাস্টম টুলও চালাতে পারেন।

দুর্ভাগ্যক্রমে সরঞ্জামটি উইন্ডোজ সমর্থন করে না।

প্রকাশ : আমি এই সরঞ্জামটির লেখক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.