গিট সংস্করণ নিয়ন্ত্রণে একটি প্যাচ কী?


136

আমি গিট এবং সংস্করণ নিয়ন্ত্রণ উভয় ক্ষেত্রেই নতুন তাই আমি কোন প্যাচটি কী তা নির্ধারণ করার চেষ্টা করছি এবং আমি গিটের অন্যান্য ক্রিয়াকলাপগুলির থেকে এটি কীভাবে আলাদা?

আমি কখন প্যাচ প্রয়োগ করব? প্রতিবার যখন প্রতিশ্রুতিবদ্ধ তা কি ঘটে?

উত্তর:


116

আপনি এই ব্লগ পোস্টে দেখতে পারেন কীভাবে আপনি প্যাচ তৈরি করতে পারেন (আপনি যে পরিবর্তনগুলি যোগাযোগ করতে চান এবং অন্য রেপোতে প্রয়োগ করতে চান তা সংগ্রহ)

গিট প্যাচ
(২০০৮ ব্লগ পোস্টের ছবি " গিটার সহ বিয়ারুবি: কীভাবে কাজ করবে? ", জান এয়ারটিএস দ্বারা প্রকাশিত )

আরও দেখুন গীত সঙ্গে পাগল অবদান অন্য কংক্রিট উদাহরণ হিসাবে।

আজকাল, গিটহাব টান অনুরোধটি গিটিহাব রেপোগুলিতে প্যাচগুলি প্রয়োগ করা সত্যিই সহজ করে তোলে , যা আপনি যখন সরাসরি অবদানকারী না হন (যেমন আপনার সরাসরি রেপোতে চাপ দেওয়ার কোনও অধিকার নেই) তখন কার্যকর হয়।
আসলে, মোটামুটি সম্প্রতি গিটহাব নতুন প্যাচগুলির বিজ্ঞপ্তিটি উন্নত করতে " বেটার পুল পুল রিকুয়েস্ট ইমেলগুলি " প্রবর্তন করেছে ।


4
একটি ভাল উত্তর, এবং একটি আমাকে বলে যে একটি জিআইটি 'প্যাচ' আমি যা খুঁজছি তা নয়।
রনলগ

91

প্যাচ হ'ল ইউনিক্স প্রোগ্রাম যা পৃথক ফাইলে থাকা নির্দেশাবলী অনুসারে পাঠ্য ফাইল আপডেট করে, প্যাচ ফাইল বলে।

সুতরাং, অন্য কথায় এর অর্থ হ'ল নির্দেশাবলীর সাথে ফাইল বা এমন একটি প্রোগ্রাম যা সেই ফাইলটিকে প্রসেস করে এবং কিছুতে এটি প্রয়োগ করে।

এখন, প্যাচ ফাইলটি কী? ধরা যাক আপনার কাছে দুটি লাইন সহ একটি পাঠ্য ফাইল রয়েছে:

This is line A.
This is line B, or otherwise #2.

তারপরে আপনি প্রথম লাইনটি পরিবর্তন করুন, এবং এখন আপনার ফাইলটি এমন দেখাচ্ছে:

This is SPARTA.
This is line B, or otherwise #2.

আপনি কীভাবে ফাইলের বিষয়বস্তুতে পরিবর্তনটি বর্ণনা করবেন? আপনি যে প্রথম লাইনটি বলতে পারেন "এটি লাইন এ।" "এটি স্পার্টা" দিয়ে প্রতিস্থাপিত হয়েছে, বা এমনকি প্রথম লাইনের শেষ শব্দ "এ" এর সাথে অন্য একটি শব্দ "স্পার্টা" প্রতিস্থাপন হয়েছে। এবং এটি ঠিক আমাদের পার্থক্য জানায়। ধরা যাক আমার কাছে এই ফাইলটির দুটি সংস্করণ রয়েছে, একটি ফাইল ফাইল 1.txt এবং অন্যটি ফাইল2.txt, তারপরে আমি পৃথকভাবে চালনা করব এবং এটি পাই:

$ diff -u file1.txt file2.txt 
--- file1.txt   2011-11-26 11:07:03.131010360 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.

পরিবর্তনের বর্ণনা থাকলে আপনি এটিকে প্রাথমিক সামগ্রীতে প্রয়োগ করতে পারেন এবং একটি পরিবর্তিত সামগ্রী পেতে পারেন। এবং এই পরিবর্তনগুলি, ইউনিফাইড বিন্যাসে রাখে যা "প্যাচ" -র মতো প্রোগ্রামগুলি বুঝতে পারে, তাকে প্যাচ ফাইল বলা হয়। কারও কাছ থেকে মাছ নেওয়ার পরিবর্তে তারা আপনাকে কীভাবে মাছের শিখায় তা শিখিয়ে দেওয়ার মতো, যাতে আপনি সেই মাছটি নিজেই পানির বাইরে খনন করতে পারেন। এখন, ফাইলটি.txt এর মতো দেখতে আমাদের প্যাচটি ফাইল1.txt এ প্রয়োগ করুন:

$ cat file1.txt 
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch 
--- file1.txt   2011-11-26 11:09:38.651010370 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.
$ patch < changes.patch 
patching file file1.txt
$ cat file1.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ 

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

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

আশা করি এটা সাহায্য করবে!


কখনও জানতেন না গিটটি অন্তর্নির্মিত patchপ্রোগ্রামটি ব্যবহার করে । আমি ভেবেছিলাম গিট এর নিজস্ব বাস্তবায়ন আছে।
রেডিয়েন্টশো

43

প্যাচ হ'ল একটি ছোট ফাইল যা একটি সংগ্রহস্থলের মধ্যে করা পরিবর্তনগুলি নির্দেশ করে। এটি সাধারণত ব্যবহৃত হয় যখন আপনার দলের বাইরের কেউ যদি কেবল পঠনযোগ্য অ্যাক্সেস করে তবে একটি ভাল কোড পরিবর্তন পাওয়া যায়। তারপরে তিনি একটি প্যাচ তৈরি করেন এবং এটি আপনার কাছে প্রেরণ করেন। আপনি এটি প্রয়োগ করুন এবং এটিকে গিটের ভাণ্ডারে ঠেলাবেন। তারপরে সকলেই আপডেট হওয়া সংস্করণটি থেকে উপকৃত হয় এবং প্যাচের লেখকের পড়া / লেখার অ্যাক্সেসের প্রয়োজন হয় না।

এটি প্রকৃতপক্ষে একটি সুরক্ষিত জিনিস (কমপক্ষে, লোকেরা এটি এর জন্য ব্যবহার করে)।


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

Congratullations! আপনি প্যাচগুলি কীসের জন্য ব্যবহার করা হচ্ছে সে সম্পর্কিত সত্যই এটি পেরেক দিয়েছিলেন, অর্থাত্‍, কোনও সংগ্রহস্থলগুলিতে পরিবর্তনগুলি জমা দেওয়ার একটি উপায় যা পরিবর্তনের লেখকের কোনও লেখার অ্যাক্সেস নেই। অতএব, গিটিহাবের কাঁটাচামচ এবং টান অনুরোধ মডেলটি পরিবর্তন বিতরণের প্যাচ মডেলের প্রতিস্থাপন। সুতরাং আমি বিশ্বাস করি প্যাচগুলি কেবল গিটহাবের মতো সরঞ্জামের প্রসঙ্গের বাইরে কার্যকর।
mljrg

8

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

git diff > mypatch.patch

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

git diff --cached > mypatch.patch 

আপনি পরে প্যাচ প্রয়োগ করতে পারেন:

git apply mypatch.patch

আপনি যদি গিট সংগ্রহস্থলটিতে কিছু পরিবর্তন করতে চান, আপনার কাছে লেখার অনুমতি নেই, কেবল পরিবর্তন করুন এবং উভয়ের মধ্যে একটি প্যাচ তৈরি করুন এবং প্যাচটি এমন কাউকে পাঠান যার কাছে প্যাচ প্রয়োগের অনুমতি রয়েছে, তার মাধ্যমে আপনার পরিবর্তনগুলি সেই গিট ভাণ্ডারে যুক্ত করা উচিত।


আরও ভাল ডেমো: robots.thoughtbot.com/… । আমার মৌলিক উদাহরণের সংক্ষিপ্তসার: git format-patch <base_commit_or_branch_name>= সমস্ত কমিটকে এখন থেকে <base_commit_or_branch_name> এ গুছিয়ে রাখুন সুন্দর এবং ঝরঝরে ফাইলের মধ্যে আলাদা আলাদা পাশাপাশি কমিটের বার্তা রয়েছে সহজেই প্রেরণের জন্য ( উদাহরণস্বরূপ: ইমেলের মাধ্যমে) অন্য কারও কাছে যা তাদের প্যাচ করতে চায় তাদের কোড বেস। তারপরে প্রাপক আপনার ফাইলটি দিয়ে তাদের সিস্টেমটি প্যাচ করে:cat *.patch | git am
গ্যাব্রিয়েল স্ট্যাপলস

7

একটি প্যাচ হ'ল এক বা একাধিক ফাইলের মধ্যে পার্থক্যের একটি সেট, তাদের মধ্যে কী আলাদা তা দেখানোর জন্য। আপনি সাধারণত যা পরিবর্তন করেছেন তা কাউকে দেখানোর জন্য কেবল একটি প্যাচ তৈরি করবে। আপনি যখন এটি করতে পারেন তার একটি উদাহরণ হ'ল যখন আপনি কোনও ওপেন সোর্স অ্যাপ্লিকেশনটিতে কোনও বাগ খুঁজে পান এবং ঠিক করেন এবং তারপরে তার বাগ ট্র্যাকারে ফিক্স পোস্ট করেন।

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