উত্তর:
প্যাচ তৈরির সর্বাধিক সাধারণ উপায় হ'ল diff
কমান্ড বা কিছু সংস্করণ নিয়ন্ত্রণের অন্তর্নির্মিত diff
কমান্ডটি চালানো। কখনও কখনও, আপনি কেবল দুটি ফাইলের সাথে তুলনা করছেন এবং আপনি এটির diff
মতো চালান :
diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch
তারপরে আপনি একটি প্যাচ পান যা একটি ফাইলের জন্য পরিবর্তনগুলি ধারণ করে এবং এতে কোনও ফাইলের নাম থাকে না। আপনি যখন এই প্যাচটি প্রয়োগ করেন, আপনি কোন ফাইলটি প্রয়োগ করতে চান তা নির্দিষ্ট করতে হবে:
patch <alice_to_bob.patch version2_by_alice.txt
প্রায়শই, আপনি একটি ডিরেক্টরিতে থাকা সম্পূর্ণ মাল্টি-ফাইল প্রকল্পের দুটি সংস্করণ তুলনা করছেন diff
দেখতে দেখতে একটি সাধারণ আমন্ত্রণ :
diff -ru old_version new_version >some.patch
তারপরে প্যাচটিতে ফাইলের নাম থাকে যা শিরোনাম লাইনে দেওয়া হয় diff -ru old_version/dir/file new_version/dir/file
। আপনাকে ফাইলের নাম থেকে patch
উপসর্গটি ( old_version
বা new_version
) ফেলা করতে হবে। এর -p1
অর্থ কী : ডিরেক্টরিটির একটি স্তরের স্ট্রিপ।
কখনও কখনও, প্যাচের শিরোনামের লাইনগুলিতে সরাসরি কোনও লিড-আপ না করে ফাইলের নাম থাকে। সংস্করণ নিয়ন্ত্রণ সিস্টেমের ক্ষেত্রে এটি সাধারণ; উদাহরণস্বরূপ cvs diff
শিরোনাম লাইনগুলি দেখতে দেখতে উত্পন্ন করে diff -r1.42 foo
। তারপরে স্ট্রিপের কোনও উপসর্গ নেই, সুতরাং আপনাকে অবশ্যই উল্লেখ করতে হবে -p0
।
বিশেষ ক্ষেত্রে যখন আপনি যে গাছগুলির সাথে তুলনা করছেন সেখানে কোনও উপ-ডিরেক্টরি নেই, তখন কোনও -p
বিকল্পের প্রয়োজন নেই: patch
ফাইলের নামের সমস্ত ডিরেক্টরি অংশ বাতিল করে দেবে। তবে বেশিরভাগ সময় আপনার প্রয়োজন হয় -p0
বা -p1
প্যাচ কীভাবে উত্পাদিত হয়েছিল তার উপর নির্ভর করে।
diff old/foo new/foo >my.patch
বা diff ../old/foo foo >my.patch
বা diff foo.old foo >my.patch
এবং ব্যবহারকারী সঙ্গে এটি প্রয়োগ হতে পারে patch <my.patch
যত্ন কিভাবে প্যাচ উত্পাদিত হয়, এবং তারপর করেও -p
সুবিধার্থে যোগ করা হয়েছিল। কিন্তু আমি আসলে জানি না, patch
একটি পুরানো ইউটিলিটি এবং সময় দ্বারা আমি এটা ব্যবহার শুরু -p0
বা -p1
ইতিমধ্যে সবচেয়ে সাধারণ উপায় এটি ব্যবহার করতে ছিল।
লোকটির কাছ থেকে:
-pnum
বা--strip=num
প্যাচ ফাইলে পাওয়া প্রতিটি ফাইলের নাম থেকে নমন লিডিং স্ল্যাশযুক্ত ক্ষুদ্রতম উপসর্গটি স্ট্রিপ করুন। এক বা একাধিক সংলগ্ন স্ল্যাশগুলির একটি ক্রম একক স্ল্যাশ হিসাবে গণনা করা হয়। প্যাচ ফাইলে পাওয়া ফাইলের নামগুলি কীভাবে চিকিত্সা করা হবে তা নিয়ন্ত্রণ করে, আপনি যদি প্যাচ পাঠিয়েছেন এমন ব্যক্তির চেয়ে আপনার ফাইলগুলি অন্য কোনও ডিরেক্টরিতে রাখেন। উদাহরণস্বরূপ, প্যাচ ফাইলটিতে ফাইলের নামটি মনে করা ছিল:/u/howard/src/blurfl/blurfl.c
সেটিং
-p0
পুরো ফাইলের নামটি অবিস্মরণিত দেয় ,-p1
দেয়u/howard/src/blurfl/blurfl.c
অগ্রণী স্ল্যাশ ছাড়া ,
-p4
দেয়blurfl/blurfl.c
পার্থক্যটি হ'ল পরের সংখ্যাটি -p
সরানো হবে এমন পথের উপাদানগুলির সংখ্যা নির্দিষ্ট করে।
বলুন আমাদের একটা পথ আছে /Barack/Obama
। -p0
যুক্তি দিয়ে এটিতে কোনও প্যাচ চালানো পথটিকে যেমন ব্যবহার করবে :
/Barack/Obama
তবে আমরা প্যাচিংয়ের সময় পথটি ছাঁটাতে পারি:
-p1
রুট স্ল্যাশ সরিয়ে ফেলবে (দ্রষ্টব্য যে এটি এখনই বারাক হয়ে থাকবে, এটির কোনও স্ল্যাশ ছাড়াই):
Barack/Obama
-p2
বারাক (এবং সংলগ্ন ডান স্ল্যাশ) অপসারণ করবে:
Obama
এই patch
আচরণের "কেন" প্রসারিত করতে , এই থ্রেডটি পড়ুন ।