আমি যখন "গিট ডিফ" টাইপ করি, তখন আমি "ডিফ-ই" এর মতো পাশাপাশি পাশের পার্থক্য দেখতে চাই বা "কেডিফ 3" এর মতো ইন্টারেক্টিভ ডিফ সরঞ্জামটিতে ডিফটি প্রদর্শন করতে চাই। কিভাবে এই কাজ করা যেতে পারে?
আমি যখন "গিট ডিফ" টাইপ করি, তখন আমি "ডিফ-ই" এর মতো পাশাপাশি পাশের পার্থক্য দেখতে চাই বা "কেডিফ 3" এর মতো ইন্টারেক্টিভ ডিফ সরঞ্জামটিতে ডিফটি প্রদর্শন করতে চাই। কিভাবে এই কাজ করা যেতে পারে?
উত্তর:
যদিও গিটের ডিফের অভ্যন্তরীণ বাস্তবায়ন রয়েছে, আপনি তার পরিবর্তে একটি বাহ্যিক সরঞ্জাম সেট আপ করতে পারেন।
বাহ্যিক ডিফ সরঞ্জামটি নির্দিষ্ট করার জন্য দুটি ভিন্ন উপায় রয়েছে:
GIT_EXTERNAL_DIFFএবং সেটGIT_DIFF_OPTS বিভিন্ন পরিবেশের।git configআরো দেখুন:
git diff --helpএকটি করার সময় git diff, গিট উপরের পরিবেশের ভেরিয়েবল এবং এর উভয় সেটিংস পরীক্ষা করে.gitconfig ফাইল ।
ডিফল্টরূপে, গিট নিম্নলিখিত সাতটি আর্গুমেন্টটি ডিফার প্রোগ্রামে পাস করে:
path old-file old-hex old-mode new-file new-hex new-mode
আপনার সাধারণত পুরানো-ফাইল এবং নতুন-ফাইলের পরামিতিগুলি প্রয়োজন। অবশ্যই বেশিরভাগ ডিফ সরঞ্জামগুলি আর্গুমেন্ট হিসাবে কেবল দুটি ফাইলের নাম নেয়। এর অর্থ হ'ল আপনাকে একটি ছোট্ট র্যাপার-স্ক্রিপ্ট লিখতে হবে, যা গিট স্ক্রিপ্টটিতে সরবরাহ করে এমন আর্গুমেন্ট গ্রহণ করে এবং আপনার পছন্দের বাহ্যিক গিট প্রোগ্রামে তাদের হাতে দেয়।
ধরা যাক আপনি নিজের মোড়ক-স্ক্রিপ্টটি নীচে রেখেছেন ~/scripts/my_diff.sh:
#!/bin/bash
# un-comment one diff tool you'd like to use
# side-by-side diff with custom options:
# /usr/bin/sdiff -w200 -l "$2" "$5"
# using kdiff3 as the side-by-side diff:
# /usr/bin/kdiff3 "$2" "$5"
# using Meld
/usr/bin/meld "$2" "$5"
# using VIM
# /usr/bin/vim -d "$2" "$5"
তারপরে আপনাকে সেই স্ক্রিপ্টটি কার্যকর করা দরকার:
chmod a+x ~/scripts/my_diff.sh
তারপরে আপনাকে গিটকে জানাতে হবে যে কীভাবে এবং কোথায় আপনার কাস্টম ডিফ র্যাপার স্ক্রিপ্টটি পাওয়া যায়। এটি করার জন্য আপনার কাছে তিনটি পছন্দ রয়েছে: (আমি .gitconfig ফাইল সম্পাদনা করতে পছন্দ করি)
ব্যবহার GIT_EXTERNAL_DIFF,GIT_DIFF_OPTS
উদাহরণস্বরূপ আপনার .bashrc বা .bash_profile ফাইলটিতে আপনি সেট করতে পারেন:
GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh
export GIT_EXTERNAL_DIFF
ব্যবহার git config
আপনার র্যাপার স্ক্রিপ্টটি কোথায় পাওয়া যাবে তা নির্ধারণ করতে "গিট কনফিগারেশন" ব্যবহার করুন:
git config --global diff.external ~/scripts/my_diff.sh
আপনার সম্পাদনা ~/.gitconfig ফাইল
~/.gitconfigএই লাইনগুলি যুক্ত করতে আপনি নিজের ফাইলটি সম্পাদনা করতে পারেন :
[diff]
external = ~/scripts/my_diff.sh
বিঃদ্রঃ:
একইভাবে আপনার কাস্টম ডিফ সরঞ্জামটি ইনস্টল করতে, আপনি একটি কাস্টম মার্জ-সরঞ্জামও ইনস্টল করতে পারেন, যা মার্জটিকে আরও ভাল রূপে সহায়তা করার জন্য একটি ভিজ্যুয়াল মার্জিং সরঞ্জাম হতে পারে। (progit.org পৃষ্ঠা দেখুন)
দেখুন: http://fredpalma.com/518/visual-diff-and- নিম- tool/ এবং https://git-scm.com/book/en/v2/ কাস্টমাইজিং- গিট- গিট- কনফিগারেশন
meld?
meldডিরেক্টরিটি আলাদা করার জন্য সংস্করণটি কি কনফিগার করা যায়, যেখানে আমি কোন ফাইল (গুলি) বেছে নিতে পারি তার জন্য পৃথকটি দেখতে চাই? বর্তমানে এটি meldপ্রতিটি ফাইলের জন্য একটি পৃথক কমান্ড চালায় meldএবং পরবর্তী ফাইলটি দেখতে আমাকে ছাড়তে হবে। পরিবর্তে যখন meldআমাকে meldমার্চুরিয়াল থেকে ব্যবহার করা হয় তখন এটি পরিবর্তিত ফাইলগুলির একটি ডিরেক্টরি তালিকা দেখায় ।
git difftoolপরিবর্তে ব্যবহার করুন git diff। আপনি আর ফিরে যেতে পারবেন না।
এখানে অন্য স্ট্যাকওভারফ্লোটির একটি লিঙ্ক রয়েছে যা সম্পর্কে কথা বলা হয়েছে git difftool: আমি কীভাবে আমার পছন্দসই ডিফ সরঞ্জাম / দর্শকের সাথে 'গিট ডিফ' আউটপুট দেখতে পারি?
এর নতুন সংস্করণগুলির জন্য git, difftoolকমান্ডটি বাইরের বাইরে অনেকগুলি বহিরাগত ডিফ সরঞ্জামকে সমর্থন করে। উদাহরণস্বরূপ vimdiffঅটো সমর্থিত এবং কমান্ড লাইন থেকে এটি খুলতে পারে:
cd /path/to/git/repo
git difftool --tool=vimdiff
অন্যান্য সমর্থিত বাহ্যিক ডিফ সরঞ্জামগুলি এখানে তালিকাভুক্ত git difftool --tool-helpকরা হয় একটি উদাহরণ আউটপুট:
'git difftool --tool=<tool>' may be set to one of the following:
araxis
kompare
vimdiff
vimdiff2
The following tools are valid, but not currently available:
bc3
codecompare
deltawalker
diffuse
ecmerge
emerge
gvimdiff
gvimdiff2
kdiff3
meld
opendiff
tkdiff
xxdiff
This message is displayed because 'diff.tool' is not configured.। সম্ভবত এই জিনিসটি কীভাবে কনফিগার করতে হয় তার সাথে উত্তরকে আপডেট করুন, যাতে এটি টার্মিনালে পাশাপাশি পাশাপাশি পৃথকভাবে প্রদর্শন করে, যা ওপি চেয়েছিল? জিএসআইআই সরঞ্জামগুলি রিমোট সার্ভারে যথেষ্ট অকেজো যেখানে আপনি ssh ব্যবহার করে সংযোগ করছেন।
git difftoolসঙ্গে vimdiffসবসময় দুই ফাইল / বাফার সঠিকভাবে লাইন নেই।
git difftool -yটিডিডিফ প্রম্পট রোধ করার জন্য ব্যবহার করুন
git difftoolউইন্ডোজ ও লিনাক্সে মেল্ড তৈরি করুন
আপনি চেষ্টা করতে পারেন git diff --word-diff। এটি হুবহু পাশাপাশি না, তবে কোনওরকম ভাল, যাতে আপনি এটি আপনার আসল পাশে পাশাপাশি প্রয়োজনের তুলনায় পছন্দ করতে পারেন।
git diff --word-diff=color
--word-diff=colorআমাকে একটি অবৈধ বিকল্পের ত্রুটি দেয়। এটি কোন সংস্করণে চালু হয়েছিল?
git diff --color-wordsকাজ করে
git diff --color-wordsআধুনিক গিট সংস্করণগুলিতে যাওয়ার উপায়।
ydiff
পূর্বে বলা হয় cdiff, এই সরঞ্জামটি পাশাপাশি , ইনক্রিমেন্টাল এবং রঙিন পার্থক্য প্রদর্শন করতে পারে ।
না করে বরং git diffকরুন:
ydiff -s -w0
এটি ydiffপার্থক্য সহ প্রতিটি ফাইলের জন্য পাশাপাশি পাশের প্রদর্শন মোডে চালু হবে ।
এর সাথে ইনস্টল করুন:
python3 -m pip install --user ydiff
-অথবা-
brew install ydiff
জন্য git log, আপনি ব্যবহার করতে পারেন:
ydiff -ls -w0
-w0আপনার টার্মিনাল প্রস্থটি স্বয়ংক্রিয়ভাবে সনাক্ত করে। বিশদ এবং ডেমো জন্য ydiff গিটহাব সংগ্রহস্থল পৃষ্ঠা দেখুন ।
গিট 2.18.0 এ পরীক্ষিত, ydiff 1.1।
git diff | cdiff -s?
ydiff -sএকটি গিট / এসএনএন / এইচজি ওয়ার্কস্পেস থেকে চালান , আপনাকে পাইপ
cd <git repo>এবং তারপরে চালানydiff -ls <path/to/file>
আপনি নীচে diffব্যবহার করে পাশাপাশি পাশাপাশি করতে পারেন sdiff:
$ git difftool -y -x sdiff HEAD^ | less
যেখানে HEAD^এমন একটি উদাহরণ যেখানে আপনি যেটির বিপরীতে চান তার সাথে প্রতিস্থাপন করা উচিত।
আমি এই সমাধান এখানে পেয়েছি যেখানে অন্যান্য বেশ কয়েকটি পরামর্শও রয়েছে। যাইহোক, এটির একটি উত্তর ওপির প্রশ্নটি সংক্ষিপ্তভাবে এবং পরিষ্কার করে দিয়েছে।
আর্গুমেন্টের ব্যাখ্যার জন্য গিট-ডিফ্টল লোকটি দেখুন ।
বোর্ডে মন্তব্যগুলি গ্রহণ করে, আপনি git sdiffনিম্নলিখিত এক্সিকিউটেবল স্ক্রিপ্ট লিখে একটি হ্যান্ডি কমান্ড তৈরি করতে পারেন :
#!/bin/sh
git difftool -y -x "sdiff -w $(tput cols)" "${@}" | less
এটি হিসাবে /usr/bin/git-sdiffএবং chmod -xএটি সংরক্ষণ করুন । তারপরে আপনি এটি করতে সক্ষম হবেন:
$ git sdiff HEAD^
tput colsপরিবর্তে, উদাহরণস্বরূপ: git difftool -x "sdiff -s -w $(tput cols)"।
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'
তারপরে সহজভাবে:
git diff
আপনি যদি গিটহাবকে জড়িত না করে কোনও ব্রাউজারে পাশাপাশি পাশাপাশি দেখতে চান তবে আপনি গিট ওয়েবডিফ উপভোগ করতে পারবেন , যার জন্য একটি ড্রপ-ইন প্রতিস্থাপন git diff:
$ pip install webdiff
$ git webdiff
এটি traditionalতিহ্যবাহী জিইউআই ডিফ্টলগুলিতে অনেকগুলি সুবিধা দেয় যেমন tkdiffএটি আপনাকে সিনট্যাক্স হাইলাইট করতে এবং চিত্রের বিভিন্নতা প্রদর্শন করতে পারে।
এটি সম্পর্কে এখানে আরও পড়ুন ।
আমি ব্যবহার colordiff ।
ম্যাক ওএস এক্সে এটি দিয়ে ইনস্টল করুন
$ sudo port install colordiff
লিনাক্সে সম্ভবত apt get install colordiffবা এর মতো কিছু রয়েছে যা আপনার ডিসট্রোর উপর নির্ভর করে।
তারপর:
$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD
অথবা একটি উপনাম তৈরি করুন
$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""
তারপরে আপনি এটি ব্যবহার করতে পারেন
$ git diffy HEAD^ HEAD
আমি এটিকে "ডিফাইফ" বলেছি কারণ ইউনিক্সে diff -yপাশাপাশি রয়েছে আলাদা । কলর্ডিফ আরও সুন্দর রঙ যুক্ত করে are বিকল্পটিতে -ydw, এটি yপাশাপাশি রয়েছে, wসাদা স্থানগুলিকে উপেক্ষা করা হবে এবং dন্যূনতম পার্থক্যের উত্পাদন করা হবে (সাধারণত আপনি পৃথক হিসাবে আরও ভাল ফলাফল পাবেন)
-yএড়ানোর জন্য যোগ করুন Launch 'colordiff' [Y/n]:।
git alias diffy "difftool --extcmd=\"colordiff -ydw\""? এটা করা উচিত নয় git config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""?
ইউনিক্সের জন্য, ন্যায় gitএবং অন্তর্নির্মিত সংমিশ্রণ diff:
git show HEAD:path/to/file | diff -y - path/to/file
অবশ্যই আপনি অন্য কোনও গিট রেফারেন্সের সাথে হেডকে প্রতিস্থাপন করতে পারেন এবং আপনি সম্ভবত -W 170ডিফ কমান্ডের মতো কিছু যুক্ত করতে চান ।
এটি ধরে নিয়েছে যে আপনি কেবল আপনার ডিরেক্টরি সামগ্রীর সাথে অতীত প্রতিশ্রুতি দিয়ে তুলনা করছেন। দুটি কমিটের মধ্যে তুলনা করা আরও জটিল। যদি আপনার শেল হয় তবে bashআপনি "প্রক্রিয়া বিকল্প" ব্যবহার করতে পারেন:
diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)
কোথায় REF1এবং REF2গিট রেফারেন্সগুলি - ট্যাগ, শাখা বা হ্যাশ।
আমি ব্যক্তিগতভাবে সত্যিই আইসিডিফ পছন্দ করি !
আপনার উপর হন, তাহলে Mac OS Xসঙ্গে HomeBrew, শুধু কি brew install icdiff।
ফাইলের লেবেলগুলি সঠিকভাবে পেতে, পাশাপাশি অন্যান্য দুর্দান্ত বৈশিষ্ট্যগুলি পেতে আমার মধ্যে রয়েছে ~/.gitconfig:
[pager]
difftool = true
[diff]
tool = icdiff
[difftool "icdiff"]
cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"
এবং আমি এটি ব্যবহার করি: git difftool
আমি যখন পার্থক্যগুলি সনাক্ত করতে গিট বিল্টিন পদ্ধতি ব্যবহারের জন্য দ্রুত উপায় অনুসন্ধান করছিলাম তখন এই প্রশ্নটি প্রকাশিত হয়েছিল। আমার সমাধানের মানদণ্ড:
গিটে রঙ পেতে আমি এই উত্তরটি পেয়েছি ।
লাইন ডিফের পরিবর্তে পাশাপাশি পার্থক্য পেতে আমি নীচের প্যারামিটারগুলির সাথে এমবি 14 এর উত্তরের উত্তরটি টুইট করেছি :
$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]"
আপনি যদি পছন্দ না করেন তবে অতিরিক্ত [- বা {+ বিকল্পটি --word-diff=colorব্যবহার করা যেতে পারে।
$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]" --word-diff=color
এটি জেসন এবং এক্সএমএল পাঠ্য এবং জাভা কোড উভয়ের সাথেই সঠিক তুলনা করতে সহায়তা করেছে।
সংক্ষিপ্ত --word-diff-regexআকারে বিকল্পটি লাইন পরিবর্তনের সাথে বড় ফাইলগুলির মাধ্যমে ব্রাউজ করার সময় স্ট্যান্ডার্ড লাইন ডিফের তুলনায় পাশের উত্স কোডের অভিজ্ঞতার সাথে রঙিন হয়ে ওঠার জন্য রঙ সেটিংসের সাথে একসাথে সহায়ক দৃশ্যমানতা দেয়।
আরও কয়েকজন ইতিমধ্যে গিট পাশাপাশি পাশাপাশি আলাদা আলাদা করার জন্য সিডিফ উল্লেখ করেছেন তবে কেউই এর সম্পূর্ণ বাস্তবায়ন দেয়নি।
সিডিফ সেটআপ করুন:
git clone https://github.com/ymattw/cdiff.git
cd cdiff
ln -s `pwd`/cdiff ~/bin/cdiff
hash -r # refresh your PATH executable in bash (or 'rehash' if you use tcsh)
# or just create a new terminal
এই লাইনগুলি সন্নিবেশ করান Edit / .gitconfig সম্পাদনা করুন:
[pager]
diff = false
show = false
[diff]
tool = cdiff
external = "cdiff -s $2 $5 #"
[difftool "cdiff"]
cmd = cdiff -s \"$LOCAL\" \"$REMOTE\"
[alias]
showw = show --ext-dif
ডিফের সাথে কাজ করার জন্য সিডিফের জন্য পেজার অফ প্রয়োজন, এটি মূলত পেজার হ'ল এটি ঠিক আছে। ডিফ্টল এই সেটিংস নির্বিশেষে কাজ করবে।
শো উপন্যাসটি প্রয়োজন কারণ গিট শো কেবল আর্গুমেন্টের মাধ্যমে বাহ্যিক ডিফ সরঞ্জামগুলি সমর্থন করে।
পার্থক্যযুক্ত বাহ্যিক কমান্ডের শেষে '#' গুরুত্বপূর্ণ। গিটের ডিফ কমান্ডটি ডিফ কমান্ডে একটি $ @ (সমস্ত উপলব্ধ ডিফ ভেরিয়েবল) যুক্ত করে তবে আমরা কেবল দুটি ফাইলের নাম চাই। সুতরাং আমরা এই দু'টিকে স্পষ্টভাবে call 2 এবং $ 5 দিয়ে ডেকে আছি এবং তারপরে hide @ কে কোনও মন্তব্যের পিছনে লুকিয়ে রাখি যা অন্যথায় সিডিফকে বিভ্রান্ত করবে। দেখে মনে হচ্ছে এমন একটি ত্রুটির ফলাফল:
fatal: <FILENAME>: no such path in the working tree
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
গিট কমান্ডগুলি এখন পাশাপাশি পাশাপাশি আলাদা করে তোলে:
git diff <SHA1> <SHA2>
git difftool <SHA1> <SHA2>
git showw <SHA>
সিডিফ ব্যবহার:
'SPACEBAR' - Advances the page of the current file.
'Q' - Quits current file, thus advancing you to the next file.
গিট ডিফ এবং ডিফ্টল এর মাধ্যমে আপনার এখন পাশাপাশি রয়েছে f এবং পাওয়ার ইউজার কাস্টমাইজেশনের জন্য সিডিফ পাইথন সোর্স কোডটি আপনার প্রয়োজন হওয়া উচিত।
এখানে একটি পদ্ধতির। আপনি যদি কম মাধ্যমে পাইপ করেন তবে এক্সটার্মের প্রস্থটি 80 তে সেট করা থাকে, যা এত গরম নয়। তবে আপনি যদি আদেশটি যেমন COLS = 210 দিয়ে এগিয়ে যান তবে আপনি আপনার প্রসারিত এক্সটার্মটি ব্যবহার করতে পারেন।
gitdiff()
{
local width=${COLS:-$(tput cols)}
GIT_EXTERNAL_DIFF="diff -yW$width \$2 \$5; echo >/dev/null" git diff "$@"
}
ইন্টেলিজ আইডিইএ খুলুন , "সংস্করণ নিয়ন্ত্রণ" সরঞ্জাম উইন্ডোতে একক বা একাধিক কমিট নির্বাচন করুন, পরিবর্তিত ফাইলগুলি ব্রাউজ করুন এবং প্রতিটি ফাইলের পাশাপাশি পরিবর্তিত পরিদর্শন করতে ডাবল ক্লিক করুন।
বান্ডিলযুক্ত কমান্ড-লাইন লঞ্চারের সাহায্যে আপনি আইডিইএটিকে যে কোনও সাধারণ দিয়ে উপরে আনতে পারেন idea some/path
এই থ্রেডে অনেক ভাল উত্তর রয়েছে। এই ইস্যুটির জন্য আমার সমাধানটি ছিল একটি স্ক্রিপ্ট লেখা।
এই 'গিট-স্ক্রিপ্টনাম' এর নাম দিন (এবং এটি সম্পাদনযোগ্য করে তুলুন এবং এটি আপনার পাঠ্যপুস্তকে যেমন কোনও স্ক্রিপ্টের মতো রাখুন) এবং আপনি এটিকে চালিয়ে একটি সাধারণ গিট কমান্ডের মতো প্রার্থনা করতে পারেন can
$ git scriptname
আসল কার্যকারিতা কেবল শেষ লাইন। উত্সটি এখানে:
#!/usr/bin/env zsh
#
# Show a side-by-side diff of a particular file how it currently exists between:
# * the file system
# * in HEAD (latest committed changes)
function usage() {
cat <<-HERE
USAGE
$(basename $1) <file>
Show a side-by-side diff of a particular file between the current versions:
* on the file system (latest edited changes)
* in HEAD (latest committed changes)
HERE
}
if [[ $# = 0 ]]; then
usage $0
exit
fi
file=$1
diff -y =(git show HEAD:$file) $file | pygmentize -g | less -R
এটি কিছুটা সীমাবদ্ধ সমাধান হতে পারে, তবে diffবাহ্যিক সরঞ্জাম ছাড়াই সিস্টেমের কমান্ড ব্যবহার করে কাজটি করা যায় :
diff -y <(git show from-rev:the/file/path) <(git show to-rev:the/file/path)
--suppress-common-lines(যদি আপনার diffবিকল্পটি সমর্থন করে)।diffচিহ্নিতকারী--width=term-width; বাশ প্রস্থ হিসাবে $COLUMNSবা হিসাবে প্রস্থ পেতে পারেন tput cols।আরও সুবিধার্থে এটি সহায়ক গিট-স্ক্রিপ্টের মধ্যেও আবৃত হতে পারে, উদাহরণস্বরূপ, এর মতো ব্যবহার:
git diffy the/file/path --from rev1 --to rev2