প্যাচিংয়ের সময় -p0 এবং -p1 আর্গুমেন্টের মধ্যে পার্থক্য কী?


19

মধ্যে পার্থক্য কি patch -p0এবং patch -p1?

আদৌ কোন পার্থক্য আছে কি?

উত্তর:


23

প্যাচ তৈরির সর্বাধিক সাধারণ উপায় হ'ল 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প্যাচ কীভাবে উত্পাদিত হয়েছিল তার উপর নির্ভর করে।


এটি এত দিন আমাকে বিভ্রান্ত করেছে। কোনও উপ-ডিরেক্টরিগুলির আচরণ -p0 থেকে আলাদা কেন? আমি সবসময় ধরে নিয়েছি যে -p0টি ডিফল্ট ছিল, তাই এটি সর্বদা p0 হওয়ার কথা থাকলে আমার সবসময় সমস্যা ছিল
ব্রায়ডন গিবসন

@BrydonGibson আমি সন্দেহ মূলত ধারণা ছিল যে প্যাচ লেখক উদাসীনভাবে লিখতে পারে 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ইতিমধ্যে সবচেয়ে সাধারণ উপায় এটি ব্যবহার করতে ছিল।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

16

লোকটির কাছ থেকে:

-pnum বা --strip=num প্যাচ ফাইলে পাওয়া প্রতিটি ফাইলের নাম থেকে নমন লিডিং স্ল্যাশযুক্ত ক্ষুদ্রতম উপসর্গটি স্ট্রিপ করুন। এক বা একাধিক সংলগ্ন স্ল্যাশগুলির একটি ক্রম একক স্ল্যাশ হিসাবে গণনা করা হয়। প্যাচ ফাইলে পাওয়া ফাইলের নামগুলি কীভাবে চিকিত্সা করা হবে তা নিয়ন্ত্রণ করে, আপনি যদি প্যাচ পাঠিয়েছেন এমন ব্যক্তির চেয়ে আপনার ফাইলগুলি অন্য কোনও ডিরেক্টরিতে রাখেন। উদাহরণস্বরূপ, প্যাচ ফাইলটিতে ফাইলের নামটি মনে করা ছিল:

 /u/howard/src/blurfl/blurfl.c

সেটিং -p0পুরো ফাইলের নামটি অবিস্মরণিত দেয় , -p1দেয়

 u/howard/src/blurfl/blurfl.c

অগ্রণী স্ল্যাশ ছাড়া , -p4দেয়

 blurfl/blurfl.c

4

পার্থক্যটি হ'ল পরের সংখ্যাটি -pসরানো হবে এমন পথের উপাদানগুলির সংখ্যা নির্দিষ্ট করে।

বলুন আমাদের একটা পথ আছে /Barack/Obama-p0যুক্তি দিয়ে এটিতে কোনও প্যাচ চালানো পথটিকে যেমন ব্যবহার করবে :

/Barack/Obama

তবে আমরা প্যাচিংয়ের সময় পথটি ছাঁটাতে পারি:

-p1রুট স্ল্যাশ সরিয়ে ফেলবে (দ্রষ্টব্য যে এটি এখনই বারাক হয়ে থাকবে, এটির কোনও স্ল্যাশ ছাড়াই):

Barack/Obama

-p2 বারাক (এবং সংলগ্ন ডান স্ল্যাশ) অপসারণ করবে:

 Obama

এই patchআচরণের "কেন" প্রসারিত করতে , এই থ্রেডটি পড়ুন

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