মেলপা মাধ্যমে ইনস্টল করা প্যাকেজ ডাউনগ্রেড করার সহজ উপায় way


22

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

এখনই, আমি এটি দুটি উপায়ে করতে পারি:

  • আমি ট্র্যাশে স্থানান্তরিত করে ফাইলগুলি মুছতে ইম্যাক্স সেট করেছি এবং আমি যখন কোনও প্যাকেজ আপডেট করি তখন পুরানো সংস্করণটি ট্র্যাশ হয়ে যায়। আমি পুরানো সংস্করণটি পুনরুদ্ধার করতে এবং এটিকে প্রতিস্থাপন করতে পারি ~/.emacs.d/elpa

  • কার্যকারিতা ভেঙে প্যাকেজটির ~/.emacs.d/elpaগিথুব রেপোতে যান, প্যাকেজের একটি পুরানো সংস্করণ আনুন, গিটব থেকে একটিটির সাথে প্রতিস্থাপন করুন , ফাইলটি বাইট-রিকম্পাইল করুন।

এই উভয় উপায়ে অনেকগুলি ম্যানুয়াল কাজের আশেপাশে স্থানান্তরিত জিনিসগুলি জড়িত। মেলপা থেকে প্যাকেজগুলি ডাউনগ্রেড করার কি আরও সহজ (পছন্দমত স্বয়ংক্রিয়) উপায় আছে?


4
আপনি কেবল ইএলপিএ / প্যাকেজ.ইল এর মাধ্যমে সর্বশেষতম সংস্করণ ইনস্টল করতে পারেন, মেলপা এবং মেলপা-স্থিতিশীল এমনকি প্যাকেজগুলির পুরানো সংস্করণ রাখবেন না। ম্যানুয়ালি প্যাকেজ ইনস্টল করতে, 1) উত্স কোড 2 ডাউনলোড করুন) M-x package-install-file। ইএলপিএ / প্যাকেজ.এল ছাড়াও প্যাকেজ পরিচালনা করার অন্যান্য উপায় রয়েছে যেমন এল- গেট এবং কোয়েলপা , তারা মনে হয় ইএলপিএ ব্যতীত ব্যবহার করতে সক্ষম হবে, সম্ভবত তারা যা চান তা করতে পারে।
xuchunyang

2
আপনি যদি এই প্রশ্নের একটি সহজ , কার্যকর কাজের উত্তর না পান তবে দয়া করে ইমাসকে বর্ধিতকরণের অনুরোধ প্রেরণ বিবেচনা করুন: M-x report-emacs-bug(এটি বর্ধিতকরণের অনুরোধের জন্যও রয়েছে)।
ড্রিউ

উত্তর:


9

আপনি যখন প্যাকেজগুলি M-x list-packagesইন্টারফেসের মাধ্যমে আপডেট করেন, প্যাকেজটির সফল ইনস্টলেশন শেষে, আপনি পুরানো প্যাকেজটি সরাতে চাইলে আপনাকে জিজ্ঞাসা করা হবে। এগুলি মুছবেন না যাতে তারা স্থানে থাকে এবং আপনি পরে এই ইন্টারফেসের মাধ্যমে নতুন প্যাকেজটি সরিয়ে ফেলতে পারেন।

আমার বর্তমান প্যাকেজ তালিকায় আমার। / .Emacs.d / elpa / ডিরেক্টরি ট্রিতে ইনস্টল করা 4 ম্যাগিটের সংস্করণ দেখানো হয়েছে।

  magit              20160827.1549 obsolete              A Git porcelain inside Emacs
  magit              20160907.945  obsolete              A Git porcelain inside Emacs
  magit              20161001.1454 obsolete              A Git porcelain inside Emacs
  magit              20161123.617  installed             A Git porcelain inside Emacs

~সমস্ত অপ্রচলিত প্যাকেজ চিহ্নিত করার জন্য আপনি কী (প্যাকেজ-মেনু-চিহ্ন-অপ্রচলিত-মুছে ফেলার জন্য) দিয়ে পুরানো সংস্করণগুলি পরিষ্কার করতে পারেন । একটি নির্দিষ্ট পুরানো সংস্করণ মুছতে তার লাইনে চলে যান এবং dমুছে ফেলার জন্য চিহ্নিত করতে টিপুন । আপনি প্যাকেজগুলি চিহ্নিত করার পরে আপনি xযথারীতি ক্রিয়াগুলি কার্যকর করতে ব্যবহার করবেন।

ইন এ গিয়ে Emacs 25 মার্ক জন্য সমস্ত প্যাকেজ Upgrade কার্যকারিতা স্বয়ংক্রিয়ভাবে মুছে ফেলার জন্য পুরানো প্যাকেজ সেট করে, এবং ইনস্টল করার পরে নিশ্চিতকরণ জন্য প্রম্পট করে। আপনাকে মূলধন "ডি" দিয়ে শুরু হওয়া লাইনগুলি সন্ধান করতে হবে, যা আপনি কেবল চিহ্নচিহ্ন করতে পারেন (নিম্নলিখিত ম্যাক্রোর সাথে সেরা)

নিম্নলিখিত লাইনগুলি থেকে ড্যাশের বাম দিকে কী বা জ্যাড টাইপ করুন।

<F3>  - start macro recording
C-s   - isearch-forward
C-q   - quoted-insert
C-j   - linefeed character
D     - the mark at the start of the line
<Ret> - stops the isearch on the line with the "D"
u     - unmark the package for deletion
<F4>  - stops macro recording - the first package is now unmarked
<F4>  - executes the macro for the next upgraded package

যদি অনুসন্ধানের জন্য আর কোনও মিল না থাকে তবে ম্যাক্রোটি ঘণ্টাটি বাজবে এবং থামবে, যাতে আপনি C-u 0 <F4>মুছে ফেলার জন্য চিহ্নিত সমস্ত প্যাকেজগুলি চিহ্নিত করতে পারেন। এর পরে আপনি xইনস্টলেশনগুলি eute করতে পারেন ।

আমি আমার মন্তব্যে যে ফাংশনটি পরিবর্তন করার ঘোষণা দিয়েছিলাম তা এমনভাবে পরিবর্তন করতে হবে যা আমি এখনও বুঝতে পারি না, কারণ এটি গুরুত্বপূর্ণ যে শেষ (কনড) ব্লকটি অন্তহীনভাবে লুপ না করার জন্য সফল হতে হবে।


ওহে ওহে, এটি আমার ইমাসগুলিতে মুছে ফেলার নিশ্চয়তার জন্য জিজ্ঞাসা করে না। এটি কেবল পুরানো প্যাকেজটি মুছে ফেলে: / আমার মনে হয় এটি ইম্যাক্স 24 এ জিজ্ঞাসা করত? আমার মনে নেই
চক্রবর্তী রাঘুনন্দন

প্রকৃতপক্ষে. Emacs 24 টি অনুরোধ জানায়, 25 মুছে ফেলার জন্য পুরানোটিকে চিহ্নিত করে এবং এটি চিহ্নগুলি কার্যকর করতে ট্রিগার করবে। আপনি প্যাকেজগুলি হাতে হাতে চিহ্নিত করতে বা মুছে ফেলা চিহ্নগুলি চিহ্ন বা (t (package-menu-mark-delete))লাইনগুলিকে পরিবর্তন করতে package-menu--mark-upgrades-1পারেন যাতে প্রথম লাইনটি কোনও কনফিগারেশন ভেরিয়েবলের পরীক্ষা বা এমন কিছু হয় যা nilআপনি পুরানো প্যাকেজগুলি তাত্ক্ষণিকভাবে মুছতে না চাইলে ফিরে আসে
p_wiersig

আপনি দয়া package.elকরে মূল উত্তরে সম্পাদনা করার জন্য প্রাসঙ্গিক লাইনগুলি যুক্ত করতে পারেন, যাতে আমি উত্তরটি গ্রহণ করতে পারি? ধন্যবাদ
চক্রবর্তী রাঘুনন্দন

অবশ্যই। আমি লক্ষ্য করেছি যে ফাংশনটি আমি যা করতে চাই তা করতে পারি না, তাই আমি ম্যাক্রোর মাধ্যমে কীভাবে সমস্ত চিহ্নমুক্ত করা যায় তা ব্যাখ্যা করেছি।
p_wiersig

7

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

package.elসামগ্রিক নকশার কারণে এই ধরণের অপারেশনগুলি সাধারণভাবে অসম্ভব এবং এগুলি সর্বদা অসম্ভব।

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


4

ডাউনগ্রেড করার একটি সহজ উপায় আমি খুঁজে পেয়েছি: আপনার নিজের মেলপা সংরক্ষণাগারটি পরিচালনা করে।

  1. ক্লোন মেলপা রেপো।
  2. সমস্ত রেসিপি মুছে ফেলার জন্য মেল্পার কাস্টম মেলপা সংরক্ষণাগার উইকি পৃষ্ঠা অনুসরণ করুন ।
  3. আপনি যে প্যাকেজটি গ্রেড করতে চান তার প্রতিশ্রুতি সন্ধান করুন এবং প্যাকেজটির জন্য সেই প্রতিশ্রুতি সহ একটি নতুন রেসিপি তৈরি করুন। ( কমিট কীভাবে নির্দিষ্ট করা যায় সে সম্পর্কে মেল্পার রিডমি দেখুন )
  4. makeডাউনগ্রেড প্যাকেজটি তৈরি করতে চালান
  5. তালিকায় আপনার নিজের মেলপা সংরক্ষণাগারটি যুক্ত করুন যা স্থানীয় ডিরেক্টরি হতে পারে package-archives
  6. প্যাকেজ মেনু ব্যবহার করে ডাউনগ্রেড প্যাকেজটি ইনস্টল করুন। অথবা আপনি package-pinned-packagesসংরক্ষণাগারটি সীমাবদ্ধ করতে ব্যবহার করতে পারেন যেখানে প্যাকেজটি ডাউনলোড করা উচিত।

3

প্রচুর লোকেরা ELPA প্যাকেজগুলি সংস্করণ নিয়ন্ত্রণে প্রতিশ্রুতিবদ্ধ না করার জন্য নির্বাচন করে, তবে কেন আপনার বিশ্বাস করা উচিত যে এটি আপনার করা উচিত this

যদি কিছু প্রতিশ্রুতিবদ্ধ হয় তবে কোনও কিছুকে ফিরিয়ে দেওয়া তুচ্ছ কাজ।

উজানের ELPA প্যাকেজগুলির অবস্থার উপর নির্ভর করে ঝুঁকিপূর্ণ।


তবে এর অর্থ হ'ল প্রতিবার প্যাকেজগুলি আপডেট করার সময় আমার প্রতিশ্রুতি রাখতে হবে। এটাই আমি চাই না। বা আমি যখনই কোনও প্যাকেজ আপডেট করি তখন আমি স্বয়ংক্রিয়ভাবে ইমাস তৈরি করতে পারি এবং আপডেট প্যাকেজগুলি প্রতিশ্রুতিবদ্ধ করতে পারি?
চক্রবর্তী রাঘুনন্দন

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