মেল্ডের সাথে শাখার পার্থক্যগুলি দেখুন?


159

আমি জানি যে আমি হেড এবং বর্তমান অবস্থার সাথে পার্থক্যটি দেখতে পারি meld .। তবে আমি শাখাগুলির মধ্যে পার্থক্যগুলি কীভাবে দেখতে পারি, উদাহরণস্বরূপ masterএবং develগর্তের সাথে?

এই মুহুর্তে আমি নিম্নলিখিত পদক্ষেপগুলি করছি:

  1. কপি কাজ করার পুনরায় নামকরণ ফোল্ডারের
    উদাহরণস্বরূপ mv /projectA /projectA_master)
  2. প্রকল্পটি আবার ক্লোন করুন
    git clone url
  3. develশাখায় স্যুইচ করুন
    cd projectA && git -b devel origin/devel
  4. মেল্ডের সাথে পার্থক্য দেখুন
    meld /projectA_Master projectA

মেলে একই ফলাফল পাওয়ার সহজ উপায় নেই? আমার কেবল পরিবর্তনগুলি পর্যালোচনা করা দরকার এবং প্রাথমিকভাবে মার্জ করার জন্য নয়।


উত্তর:


55

আমি এই সমস্যাটি বিরক্তিকরও পেয়েছি তাই আমি গিট মেল্ড তৈরি করেছি যা কার্যকারী গাছ বা মঞ্চের জায়গার বিরুদ্ধে স্বতঃস্ফূর্তভাবে পৃথক পৃথকীকরণের আরও আরামদায়ক উপায়টিকে মঞ্জুরি দেয়। আপনি এটি https://github.com/wmanley/git-meld এ খুঁজে পেতে পারেন । এটি কিছুটা মার্কের স্ক্রিপ্টের মতো তবে যেকোনও স্বেচ্ছাসেবক কমিট বা স্টেজিং এরিয়া বা অন্যের কারও সাথে ওয়ার্কিং ডিরেক্টরিকে তুলনা করার জন্য কাজ করে। আপনি যে জিনিসের সাথে তুলনা করছেন তার মধ্যে যদি একটি কাজ গাছ হয় তবে তা পঠন-লিখনও হয় যাতে আপনার পরিবর্তনগুলি হারাবেন না।


1
দুর্দান্ত সরঞ্জাম, উইল। ধন্যবাদ! পুরোপুরি প্রস্তাবিত ... এখন যদি এটি কেবল মার্জগুলিতেও কাজ করে।
ডিপস্টিক

দুর্দান্ত সরঞ্জামের জন্য টিওয়াইভিএম - (নিজের নামের সাথে যুক্ত করার জন্য অনুস্মারককে স্মরণ করিয়ে দিন)
kfmfe04

26
হিট গিথুব সংগ্রহশালা থেকে উইলের উদ্ধৃতি: "দ্রষ্টব্য: গিট-মেল্ড অপ্রচলিত, যেহেতু গিট ডিফ্টলটি গিট ১.7.১১-এ ডিড-ডিফ বিকল্পটি শিখেছে।"
ওলুক

318

সংক্ষিপ্ত এবং মিষ্টি:

git config --global diff.tool meld

এটি গিটকে ডিফ ডিভাইস meldহিসাবে ব্যবহার করতে কনফিগার করে । (আপনার কমান্ড লাইন আর্গুমেন্ট নির্দিষ্ট করার দরকার নেই, এর জন্য সমর্থন meldগিটের মধ্যে অন্তর্নির্মিত।)

তারপরে, আপনি যদি পাঠ্যের পরিবর্তে গ্রাফিকাল ডিফ করতে চান, আপনি কেবল git difftoolপরিবর্তে অনুরোধ করুন git diff(তারা উভয়ই একই যুক্তি গ্রহণ করে)। তোমার ক্ষেত্রে:

git difftool master..devel

আপডেট: আপনি যদি এক-সময়ে-সময়ে-সময়ে-পার্থক্য না চান তবে পরিবর্তে দুটি শাখার মধ্যে থাকা সমস্ত পরিবর্তনের সাথে মিলের "সাব-ডাইরেক্টরি" ভিউটি ব্যবহার করতে চান তবে এর জন্য -dবা --dir-diffবিকল্পটি নোট করুন git difftool। উদাহরণস্বরূপ, যখন আমি শাখা এক্সওয়াইজেড এ থাকি এবং আমি দেখতে চাই যে এই এবং শাখা এবিসির মধ্যে আলাদা কি আছে, আমি এটি চালাচ্ছি:

git difftool -d ABC

3
এটাই আমি খুঁজছি না এটি আমাকে ফাইল দ্বারা পার্থক্য ফাইল দেখায়। আমি স্ক্রিপ্ট diff.py এবং 'গিট ডিফ মাস্টার..ডভেল' এর আগে এটি সংরক্ষণাগারভুক্ত করেছি। আমি সমস্ত পার্থক্য এবং ডিরেক্টরি গাছটিকে 'মেল্ড ফোল্ডারএ / ফোল্ডারবি /' হিসাবে দেখতে চাই।
মার্টেন বাউর

মার্টেন, এটাই গিট কাজ। এটি কেবল ফাইলকে ট্র্যাক করে, সুতরাং আপনি কেবল ফাইলের দ্বারা পার্থক্য ফাইল দেখতে পারবেন। গিট ইন, আপনি একা খালি dir করতে পারবেন না। কোন বিশেষ কারণে আপনি ডিয়ারের মধ্যে পার্থক্য প্রদর্শন করতে চান?
ডনি করনিয়া

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

17
@ মার্টেনবাউর আমার মনে হয় আপনি এটি চান: গিফ ডিফ্টল --dir-diff মাস্টার ডেভেল
স্টাফেন

3
এটি কি এমনভাবে করা যায় যাতে বর্তমান শাখাটি কোনও টিএমপি ফোল্ডারে না থাকে এবং সেজন্য সম্পাদনার অনুমতি দেয়?
zkent

100

গিট v1.7.11 দিয়ে শুরু করে আপনি ডিরেক্টরিটি ভিন্ন করতে পারেন git difftool --dir-diff। যা meld wihout https://github.com/wmanley/git- মেল্ড স্ক্রিপ্টগুলির সাথে বেশ ভাল কাজ করে ।

গিট কনফিগার করুন

git config --global diff.tool meld

এটা ব্যবহার করো

git difftool -d topic             // -d is --dir-diff
git difftool -d master..topic

ম্যাকোসের জন্য

brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true

2
আমি মনে করি এটি ওপি সত্যই চেয়েছিল। গাইড-ডিভাইসটি ব্যবহার করার জন্য -g বিকল্প এবং -dir-diff ব্যবহার করার জন্য -d বিকল্পটি নোট করুন। কোড পর্যালোচনা করার জন্য এটি ভাল। নীট: কমপক্ষে গিট 1.8 এর জন্য -d উল্লেখ করার সময় ডিফ্লটল.প্রম্পট বিকল্পের প্রয়োজন হয় না।
মাইকেল পার্সি

1
এটা চমৎকার. ঠিক আমার যা প্রয়োজন ছিল। ধন্যবাদ!
নিকোলাস

5
এটি কি এমনভাবে করা যায় যাতে বর্তমান শাখাটি কোনও টিএমপি ফোল্ডারে না থাকে এবং সেজন্য সম্পাদনার অনুমতি দেয়?
zkent

2
আমি @ জেন্টেন্ট প্রশ্নের উত্তরটিও প্রশংসা করব ... :(
টাভলিমা

3
@ জাকেন্ট @ টাভলিমা: এই কমান্ডটি ইতিমধ্যে, আপনার বর্তমান সংস্করণে সম্পাদনার অনুমতি দেয়। এমনকি আপনি যদি টেম্প ফ্লাড্ডারটিকে মেল্ডে দেখেন, আপনি যদি সংরক্ষণ করেন - Ctrl+sডান অংশটি থেকে আপনার ফাইলটি পরিবর্তন করা হয়েছে।
বেনিয়ামিন

13

বলা বাহুল্য যে git difftool -dআপনি ব্যবহার করে এখনও আপনার কাজের ফাইলগুলিকে মাইল্ডে সম্পাদনা করতে এবং সেভ করতে পারেন । এটি অর্জনের জন্য আপনাকে আপনার বর্তমান কার্যক্ষম গাছের সাথে কয়েকটি শাখা তুলনা করতে হবে, উদাহরণস্বরূপ:

git difftool -d branchname

ক্ষেত্রটি দেখায় যে বাম এবং ডান উভয় ডিরেক্টরি / tmp এ অবস্থিত। তবে, সঠিক ডিরেক্টরিতে থাকা ফাইলগুলি প্রকৃত কার্যকারী ডিরেক্টরিতে (উইন্ডোজে প্রযোজ্য নয়) আপনার ফাইলগুলির প্রতীকী লিঙ্কগুলি। সুতরাং আপনি এগুলি ঠিক মাইলডে সম্পাদনা করতে পারেন এবং যখন আপনি সেগুলি সংরক্ষণ করেন আপনার পরিবর্তনগুলি আপনার কার্যকরী ডিয়ারে সংরক্ষণ করা হবে।

তবুও আরও আকর্ষণীয় বিকল্প হ'ল স্ট্যাশ সহকারে চলমান দির তুলনা। আপনি কেবল টাইপ করে এটি করতে পারেন:

git difftool -d stash

তারপরে আপনি git stash pop/applyবিরক্তিকর দ্বন্দ্বের সমাধানটি ব্যবহার না করে এবং এড়িয়ে না গিয়ে, স্ট্যান্ড (বাম উইন্ডো) থেকে আপনার বর্তমান ওয়ার্কিং কপির (ডান উইন্ডো) থেকে কিছু পরিবর্তনগুলি স্থানান্তর করতে পারেন যা এই আদেশগুলি দ্বারা প্ররোচিত হতে পারে।

আমি মনে করি এটি স্ট্যাশগুলির সাহায্যে কর্মপ্রবাহকে উল্লেখযোগ্যভাবে বৃদ্ধি করতে পারে। আপনি স্ট্যাশ থেকে ক্রিয়াকলাপের অনুলিপিতে ধীরে ধীরে পরিবর্তনগুলি স্থানান্তর করতে এবং একের পর এক প্রতিশ্রুতিবদ্ধ করতে চান, যদি আপনি চান তবে আরও কিছু পরিবর্তন আনতে পারেন।


পাইওটার, আমি যা করার চেষ্টা করছিলাম ঠিক এটিই কিন্তু আমার ক্ষেত্রে (সেন্টোস-এ) কোনও সিমলিংক তৈরি হচ্ছে না। এখানে কোনও প্রয়োজনীয় কনফিগার সেটআপ, বা মেল্ডের একটি মিনিট সংস্করণ রয়েছে যা এটি সমর্থন করে?
wrjohns

আমি মনে করি যে গিট মেল্ড নয়, সিমলিঙ্কস তৈরির জন্য দায়বদ্ধ। ডিফ্টল কমান্ডের জন্য গিটের ম্যানুয়াল পরীক্ষা করুন। হতে পারে আপনার এটি নতুন সংস্করণে আপডেট করা উচিত?
পাইওটর জুরকিউইজ

2
শাখা থেকে কাজ করে
ডায়ারে

5

এই সরাসরি মুহূর্তে Git সংগ্রহস্থলের মধ্যে করতে একটি উপায় নয় যেন যদিও অন্যান্য উত্তর থেকে মনে হয়, এটা সহজ (উত্তর ধন্যবাদ এর আরেকটি প্রশ্ন একটি স্ক্রিপ্ট দুই করে গাছের উত্থিত করব লিখতে :)) অস্থায়ী ডিরেক্টরিতে এবং মেল্ডটি প্রস্থান করার সময় উভয় ডিরেক্টরি মুছে ফেলা করে, সেগুলিতে মেল্ড চালান:

http://gist.github.com/498628

অবশ্যই, আপনি মেল্ডের মাধ্যমে করা যে কোনও পরিবর্তন হারাবেন, তবে পার্থক্যগুলির তাত্ক্ষণিক পর্যালোচনার জন্য এটি বেশ দুর্দান্ত, আমি মনে করি।


3

আমি মনে করি এটি করার সহজ উপায়টি হ'ল git reset --soft:

লক্ষ্য: শাখা_আ এবং শাখা_বি এর মধ্যে পার্থক্যকে মেল্ডের সাথে তুলনা করুন

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .

0

গিট ভি ১..9.৯ এ আপনি কমান্ডলাইন ছাড়াই দুটি কমিটের তুলনা করতে পারবেন:

আপনাকে অবশ্যই 'গিট গুই' সম্পাদনা বিকল্পগুলিতে কনফিগার করতে হবে, বৈশ্বিক: "মার্জ সরঞ্জামটি ব্যবহার করুন: মেল্ড"।

গিটক শুরু করুন, একটি অঙ্গীকার নির্বাচন করুন, অন্য একটি প্রতিশ্রুতি নির্বাচন করুন> " এটির থেকে আলাদা করুন -> নির্বাচিত "। 'প্যাচ' এর নীচে ডানদিকে একটি ফাইল> " বাহ্যিক ডিফ " ক্লিক করুন ।

মেল্ড শুরু হয়ে এখনও নির্বাচিত প্রদর্শিত হবে, প্রথমে ডানদিকে প্রতিশ্রুতিবদ্ধ।


0

মেশানো MacOS উপর জন্য, আপনার এই যোগ ~/.gitconfigহিসাবে সুপারিশ MacOS অ্যাপ্লিকেশন, yousseb লেখককেএকটি :

[diff]
  tool = meld
[difftool]
  prompt = false
[difftool "meld"]
  trustExitCode = true
  cmd = open -W -a Meld --args \"$LOCAL\" \"$REMOTE\"
[merge]
  tool = meld
[mergetool]
  prompt = false
[mergetool "meld"]
  trustExitCode = true
  cmd = open -W -a Meld --args --auto-merge \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output=\"$MERGED\"

আপনি চাইলে কনফিগারগুলি বাদ mergeদিতে পারেন।

@ গুটেনইয়ের উত্তর স্বয়ংক্রিয়ভাবে পালানো এবং / অথবা এর সাথে আমার কারণে কার্যকর হয়নি zsh

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