'গিট ফরম্যাট-প্যাচ এবং' গিট ডিফ 'এর মধ্যে পার্থক্য কী?


92

আমি 'গিট ফরম্যাট-প্যাচ' এবং 'গিট ডিফ' এর আউটপুটটির মধ্যে কোনও পার্থক্য দেখতে পাচ্ছি না, কোনও কি আছে? এবং আমি প্যাচ তৈরি করতে 'গিট ডিফ' ব্যবহার করতে সক্ষম হবো না এবং তারপর গিট অ্যাপ্লিকেশন ব্যবহার করে এটি প্রয়োগ করতে পারি?

আমার সমস্যাটি হ'ল আমি সূচিতে পরিবর্তনগুলি যুক্ত করেছি, তবে দৃশ্যত গিট ফর্ম্যাট-প্যাচ কেবলমাত্র কমিটগুলি গ্রহণ করে, তাই যদি আমি ভিন্নতার আউটপুট ব্যবহার করতে পারি তবে আমি এই আদেশটি সূচীর পরিবর্তনের জন্য একটি প্যাচ তৈরি করতে পারি:

git diff --cached > index.patch

উত্তর:


130

এর সাথে তৈরি একটি প্যাচে git format-patchকমিট সম্পর্কে কিছু মেটা-তথ্যও অন্তর্ভুক্ত থাকবে (প্রতিশ্রুতিবদ্ধ, তারিখ, প্রতিশ্রুতি বার্তা, ...) এবং এতে বাইনারি ডেটা রয়েছে। সবকিছুই একটি মেল হিসাবে ফর্ম্যাট করা হবে, যাতে এটি সহজেই প্রেরণ করা যায়। যে ব্যক্তি এটি গ্রহণ করবে তার সাথে সংশ্লিষ্ট কমিট পুনরায় তৈরি করতে পারে git amএবং সমস্ত মেটা-ডেটা অক্ষত থাকবে। এটি git applyসাধারণ ডিফের একটি সুপার সেট হওয়ায় এটি প্রয়োগ করা যেতে পারে ।

এর সাথে ক্রেট করা একটি প্যাচ git diffপ্রসঙ্গে (মনে করুন diff -u) একটি সাধারণ পার্থক্য হবে । এটি দিয়ে প্রয়োগ করা যেতে পারে git applyতবে মেটা-ডেটা পুনরায় তৈরি করা হবে না (তারা উপস্থিত না থাকায়)।

সংক্ষেপে, git format-patchপ্রতিশ্রুতি প্রেরণে দরকারী, যখন git diffদুটি গাছের মধ্যে পার্থক্য পাওয়া যায়।


13

ম্যানুয়ালগুলি থেকে গিট-ফর্ম্যাট-প্যাচ ইমেল জমা দেওয়ার জন্য উপযুক্ত প্যাচগুলি প্রস্তুত করে, যখন গিট-ডিফ পরিবর্তনগুলি দেখায়।

এগুলি দুটি ভিন্ন জিনিস এবং এর বিভিন্ন উদ্দেশ্য রয়েছে, এগুলি কেবল প্যাচ ফর্ম্যাট আউটপুট করার জন্য ঘটে। তবে git-format-patchএকটি প্রতিশ্রুতি সম্পর্কিত তথ্য (তারিখ, লেখক, প্রতিশ্রুতি বার্তা) যুক্ত করে এবং এটি এমন একটি বিন্যাসে বান্ডিল করে যা ইউনিক্স মেল বার্তা হিসাবে প্রেরণের উপযুক্ত (যদিও এটি কেবল ফাইল, তাই এগুলি অন্য পদ্ধতিতে প্রেরণ করা যেতে পারে এবং এখনও প্রয়োগ করে) git-am)।

এছাড়াও git-format-patchপ্রতিটি পরিসীমা যে আপনি উল্লেখ কমিট জন্য একটি প্যাচ ফাইল তৈরি করে। আপনার স্টোরগুলিতে কমিট হিসাবে এই পরিবর্তনগুলি যুক্ত করা হবে git-am

git-diffআপনি যে দুটি রাজ্যের জন্য জিজ্ঞাসা করেছেন তার মধ্যে কেবল তফাত দেখায় এবং প্যাচ ফাইল তৈরি করতে ব্যবহার করা যেতে পারে। তবে এটি কেবল একটি সাধারণ প্যাচ ফাইল এবং প্যাচ প্রয়োগ করা কেবল কার্যকারী ডিরেক্টরিের অবস্থার পরিবর্তন করবে।

এবং হ্যাঁ, আপনি আপনার সূচকের জন্য একটি প্যাচ তৈরি করতে পারেন।


ধন্যবাদ ইউনিক্স মেল সম্পর্কে বিশেষ কী তাই তারা প্যাচটির উপর ভিত্তি করে ডিজাইন করেছে?
রাফিদ

7
আসলেই বিশেষ কিছু নেই। লিনাস টরভাল্ডস যে লিনাক্স কার্নেলের সাথে ইন্টিগ্রেশন করার আগে বৈধতার জন্য ইমেল দ্বারা প্যাচগুলি প্রেরণ এবং গ্রহণের সাথে জড়িত তার গিটটি ঠিক এটিই ছিল।
সিলভাইন Defresne

Git ছিল লিনাস টোরভাল্ডস দ্বারা ডিজাইন লিনাক্স কার্নেল রাখার জন্য। ইউনিক্স মেইল একটি সাধারণ বিন্যাস ছিল।
আবিজার্ন

1

প্যাচ ফাইলটি git diffকমান্ডের সাহায্যে উত্পন্ন করা যেতে পারে তবে কমান্ড দ্বারা উত্পন্ন প্যাচটির সাথে তুলনা git format-patchকরলে প্রধান পার্থক্যগুলি হ'ল:

  1. কোন কমিট সম্পর্কে কোনও মেটাডেটা নেই (যেমন তারিখ, লেখক, প্রতিশ্রুতি বার্তা ইত্যাদি);
  2. ডিফের বিষয়ে কোনও পরিসংখ্যান নেই (ডিফস্ট্যাট, যেমন এক্স ফাইল পরিবর্তিত হয়েছে, y সন্নিবেশগুলি (+), জেড মুছে ফেলা (-));
  3. কোনও বাইনারি ডিফ নেই, কেবল পাঠ্য বিভেদ রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

সমস্ত পরিবর্তিত ফাইলের জন্য প্যাচ ফাইল তৈরি করতে (সূচী বা কার্যনির্বাহী ডিরেক্টরিতে):

git diff HEAD --binary > my.patch
# git diff + git diff --cached/staged == git diff HEAD

উত্পন্ন প্যাচ ফাইল প্রয়োগ করতে:

# restore the changed files firstly
git restore --staged .
git restore .

# apply the patch to redo the changes 
git apply my.patch
# or
patch -p1 < my.patch
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.