যে কোনও ওয়ার্কিং ডিরেক্টরি থেকে আমি কীভাবে একটি -00 প্যাচ প্রয়োগ করতে পারি?


26

আমার নিখুঁত পাথগুলির সাথে একটি প্যাচ রয়েছে যা আমি ব্যবহার করতে চাই। অর্থাৎ প্রথম কয়েকটি লাইন নিম্নরূপ।

--- /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml  2014-10-10 18:47:23.000000000 +1100
+++ /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod  2014-11-11 09:44:17.786200477 +1100

যাইহোক, আমি রুট ডিরেক্টরিতে না থাকলে এটি ব্যর্থ হয়।

~$ cd
~$ sudo patch -i /tmp/fix_kde_icons.patch -p0
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
...
~$ cd /tmp
/tmp$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/tmp$ cd /usr
/usr$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/usr$ cd /
/$ sudo patch -i /tmp/fix_kde_icons.patch -p0
patching file /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml

patchকোনও কার্যনির্বাহী ডিরেক্টরি সহ পরম পথ ব্যবহার করার কোনও উপায় আছে কি ?


আমি পরিবর্তে প্যাচ নিজেই সম্পাদনা করব।
ব্রায়াম

@ ব্রাইয়াম প্যাচটিতে আমি কী নির্দিষ্ট সম্পাদনা করব? আমি মূলত ভাবছি যে আমি patchকমান্ডের কোনও টার্গেট পাথ নির্দিষ্ট না করে এড়াতে পারি কিনা ।
স্পারহক

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

1
@ ফাহিমমিঠা হ্যাঁ, এটি আর্চ / কেডিএ দিয়ে চলছে। এটি এই বাগটি ঠিক করতে হবে । আমি ম্যানুয়ালি পরিবর্তনগুলি প্রয়োগ করি যদি ঠিক হয়ে যায়। যাইহোক, আমি মনে করি না যে প্রসঙ্গটি এ ক্ষেত্রে এতটা গুরুত্বপূর্ণ, কারণ আমি কোনও পরীক্ষার ফাইল দিয়ে এই সমস্যাটির প্রতিলিপি করতে পারি /tmp/foo। আমি প্রযোজ্য জেনেরিক উত্তরে আরও আগ্রহী patch
স্পারহক

উত্তর:


35

জিএনইউ প্যাচের উত্স কোডটি দেখে, এই আচরণটি ভার্সন ২. since থেকে নির্মিত। জিএনইউ প্যাচ ২..1.১ অনুসারে, ..বর্তমান ডিরেক্টরিটি মূল ডিরেক্টরি না হলে কেবল আপেক্ষিক পাথগুলি গ্রহণ করা হবে accepted

পরম পাথযুক্ত একটি প্যাচ প্রয়োগ করতে, আপনি ব্যবহার করতে পারেন

(cd / && sudo patch -p0) <foo.patch

GNU প্যাচের সাম্প্রতিক সংস্করণগুলিতে, আপনি সহজভাবেই পারেন

sudo patch -d/ -p0 <foo.patch

ঠিক আছে, এটা কি তাই। তবে, আপনি যদি আমার নির্দেশগুলি পরীক্ষা করেন তবে লক্ষ্যযুক্ত cd /usrফাইলগুলি এই ডিরেক্টরিতে থাকা সত্ত্বেও ব্যর্থ হয়েছে।
স্পারহক

@ স্পারহাক দুঃখিত, আমার বিবরণটি আংশিকভাবে ভুল ছিল। পরীক্ষাটি হ'ল: যদি বর্তমান ডিরেক্টরিটি না হয় /তবে কোনও ..উপাদান যুক্ত কোনও নিরঙ্কুশ পথ বা পাথ প্রত্যাখ্যান করুন ।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

7
বা আরও সহজভাবে,sudo patch -d/ -p0 <foo.patch
কিয়ান

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