সংস্করণ নিয়ন্ত্রণে .emacs এবং .emacs.d রাখার সময় আমার কী করা উচিত নয়?


65

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

তাই স্বাভাবিকভাবেই আমি আমার .emacsএবং .emacs.dএই সেটআপটিতে যুক্ত করেছি ।

তারপরে আমি কিছু প্যাকেজ ইনস্টল করেছি এবং আমার পাইথন রেপো থেকে ফাইলগুলি বাদ দিই ঠিক তেমনভাবে *.elcআমার যোগ করা শেষ ।.hgignore*.pyc

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

এই ধরণের ভাগ করে নেওয়া আরও মূল্যবান করার জন্য সাধারণত কোন সেটআপ কৌশল ব্যবহার করা হয়? আমার শেল ফাইল সেটআপ সহ আমি এখনও শাখাগুলিতে পৃথক ফাইলগুলি চেরি-বেছে নেওয়ার ভাল উপায়গুলি সন্ধান করছি।


শুধু এফওয়াইআই, নীচে যা বলা হয়েছে তা সত্ত্বেও, আপনি যদি আপনার সমস্ত কম্পিউটারে একই ইমাস সংস্করণ ব্যবহার করেন তবে এলপা ডিরেক্টরিটি সিঙ্ক করা পুরোপুরি ঠিক আছে।
মালবারবা

অগ্রাহ্য করবেন না *.elcstackoverflow.com/a/24539894/324105
phils

উত্তর:


36

আমি আমার ইমাস কনফিগারেশনটি গিথুবে সংরক্ষণ করি কারণ আমি দুটি ভিন্ন কম্পিউটার ব্যবহার করি, একটি কর্মস্থলে, একটি বাড়িতে।

আমি উত্স নিয়ন্ত্রণে রাখি না এমন জিনিসগুলি সম্পর্কে এখানে একটি তালিকা রয়েছে:

পরিবেশ নির্দিষ্ট সেটআপ।

উদাহরণস্বরূপ, আমার ইমাসগুলি বিভিন্ন মেশিনে স্টার্ট আপে বিভিন্ন org ফাইলটি খুলবে। আপনি এই সেটিংস উত্স নিয়ন্ত্রণে প্রতিশ্রুতিবদ্ধ করতে চান না।

আমি (require 'local nil t)এই সেটিংসটি লোড করতে ব্যবহার করি , তবে কখনও প্রতিশ্রুতিবদ্ধ না local.el

প্যাকেজগুলি প্যাকেজ ম্যানেজার দ্বারা পরিচালিত

প্যাকেজগুলি প্যাকেজ পরিচালকের দ্বারা পরিচালিত হয়, আমি সেই প্যাকেজগুলিকে উত্স নিয়ন্ত্রণে না রাখার পরামর্শ দিই। কারণ :

  1. প্রতি আপডেটের পরে আপনাকে কমিট করতে হবে।
  2. আপনি গুরুত্বপূর্ণ ফাইলটি অন্য কোথাও সঞ্চয় করতে পারেন যা আপনাকে বিভিন্ন কম্পিউটারে সঠিকভাবে সিঙ্ক্রোনাইজ করতে অক্ষম করে।

প্রতিশ্রুতিবদ্ধ প্যাকেজগুলির পরিবর্তে, আমি আপনাকে আপনার প্যাকেজ ম্যানেজার দ্বারা স্বীকৃত প্রক্রিয়াটি প্রতিশ্রুতিবদ্ধ করার পরামর্শ দিচ্ছি ।

উদাহরণস্বরূপ, আমি আমার তৃতীয় প্যাকেজগুলি পরিচালনা করতে ক্যাস্ক ব্যবহার করি , সুতরাং আমি কেবল ক্যাস্ক ফাইলটিই প্রতিশ্রুতিবদ্ধ করি, যার মধ্যে আমি নির্দিষ্ট প্যাকেজগুলি চাই contains

আমি যখন package.elআগে ব্যবহার করি তখন আমার কনফিগারেশনটি প্যাকেজ ইনস্টল করা আছে / আপডেট হওয়া দরকার কিনা তা পরীক্ষা করে দেখবে, তাই কোনও প্যাকেজ প্রতিশ্রুতিবদ্ধ নয়।

তবে কিছু প্যাকেজ রয়েছে যা কোনও প্যাকেজ সংগ্রহস্থলে বিদ্যমান নেই, এই ক্ষেত্রে, আমি এটি উত্স নিয়ন্ত্রণে প্রতিশ্রুতিবদ্ধ করব যেমন ইন site-lisp

সমস্ত ফাইল প্যাকেজ দ্বারা উত্পাদিত

উদাহরণ হিসেবে বলা যায়, সব স্বয়ংসংরক্ষিত, ব্যাকআপ ফাইল, tramp, eshell, recentf, এমনকি custom.el। আমি এই ফাইলগুলিতে ~/.emacs/.genরেখেছি, তাই আমি কেবল এই ডিরেক্টরিটিকে উপেক্ষা করতে পারি।

যে ফাইলগুলি ঘন ঘন পরিবর্তিত হয় তবে সিঙ্ক্রোনাইজ করা প্রয়োজন

যেমন দ্বারা ব্যবহৃত ব্যক্তিগত অভিধান ফাইল aspell, ফাইল ডাটাবেস দ্বারা ব্যবহৃত elfeed, এই ক্ষেত্রে, আমি ড্রপবক্সকে এটি বিভিন্ন কম্পিউটারে সিঙ্ক্রোনাইজ করতে ব্যবহার করি। সুতরাং আমি প্রতিশ্রুতি দিতে ভুলব না।


2
ক্যাস্ক সম্পর্কিত বিষয়টি ঠিক ততক্ষণ ঠিক আছে যতক্ষণ না আপনি কেবল মেশিনের সাথে কাজ করেন যা ক্যাসকে সমর্থন করে, বিশেষত উইন্ডোজ নয়।
টি ভেরন

কিছু লোক প্রতিটি আপডেটের পরে প্যাকেজ কমিট করতে ঠিক করতে পারে, যদি না আমি পরামর্শ দিই পুরো প্যাকেজটি সংরক্ষণ না করে। প্যাকেজ ম্যানেজারকে কাজটি করতে দিন।
রাঙ্গি লিন

@ টি.ভেরন আমি সিগউইনে ক্যাসকে কাজ করতে সক্ষম হয়েছি তবে এটি আমাকে কিছুটা সমস্যা দিয়েছে । বিটিডাব্লু, আমি এখন ইমাস প্রিলিউড ব্যবহার করছি এবং আমি খুঁজে পেলাম যে prelude-require-packagesফাংশনটি দরিদ্র ব্যক্তির ক্যাস্ক হিসাবে কাজ করে (উইন্ডোজের সাথেও কাজ করার সুবিধা নিয়ে)।
RSSenna

সাইগউইন ক্যাস্ক কি ডাব্লু 32 ইমাক নিয়ে কাজ করে? যখন এই আচরণটি অনুকরণকারী ম্যাক্রোগুলির ক্ষেত্রে আসে, emacs.stackexchange.com/a/410/184package-installউল্লিখিত বিল্ট- ইনগুলি পাশাপাশি সহায়ক হতে পারে।
টি ভেররন

2
@ জোর্জে আরায়নাভারো বিভিন্ন মেশিনে একইরকম হলে এটি প্রতিশ্রুতিবদ্ধ হওয়া পুরোপুরি ঠিক। :) তবে এটি আমার ক্ষেত্রে নয়। আরও কী, যেহেতু এটি স্বয়ংক্রিয়ভাবে সম্পাদনা করা হবে, একসময় আমি প্রতিশ্রুতি দিতে ভুলে যাই, এজন্য আমি custom.elউত্স নিয়ন্ত্রণে রাখি না ।
রাঙ্গি লিন

8

কেবল নিশ্চিত হয়ে নিন যে কোনও উত্পন্ন জিনিস (যেমন @ রাঙ্গি-লিন নোট) রেপোতে নেই এবং, যদি আপনি আপনার ডটফিলগুলি অন্যের সাথে ভাগ করে নেন তবে কোনও সুরক্ষা সম্পর্কিত জিনিস নেই (যেমন পাসওয়ার্ড এবং এপিআই কী)। পরবর্তীকালে আমি আমার কাস্টমাইজেশনকে একটি পৃথক ফাইলে এতে ভাগ করেছি:

(setq custom-file (concat dotfiles-dir "custom.el"))
(load custom-file 'noerror)

মাঝেমধ্যে setqউপরের স্নিপেটের আগে আমি "নিরাপদ" কাস্টমাইজেশনগুলিকে একটি বড় বিবৃতিতে স্থানান্তরিত করি ।

আমার .gitignore ফাইলটি দেখে মনে হচ্ছে:

/.org-id-locations
/ac-comphist.dat
/auto-save-list
/custom.el
/elpa/*
/image-dired/
/oauth2.plstore
/session.*
/tramp
/url/
/var/
*.elc

8

TL; ড

  • .emacs.d/init.elপরিবর্তে ব্যবহার করুন.emacs
  • আপনার .gitignoreএকটি সাদা তালিকা তৈরি করুন
  • একটি প্যাকেজ পরিচালক ব্যবহার করুন

.emacs.d / init.el

এই সেটআপটি আমাকে গিটের অধীনে রাখার অনুমতি দেওয়ার .emacs.d/init.elপরিবর্তে আমি ব্যবহার করি । রয়ে আপনি Git সংগ্রহস্থলের করার জন্য একটি সিম্বলিক লিঙ্ক তৈরি করতে অথবা আপনার বাড়ির ডিরেক্টরিতে Git রেপো আছে সহজ করে তোলে। আপনি যদি ব্যবহার করেন তবে সমস্ত সমাধান হয়ে যায়।.emacs.emacs.d~/.emacs.emacs.d

.gitignore

আমার .gitignore হল ডিফল্ট কালো তালিকার পরিবর্তে সাদা তালিকা।

*

!.gitignore
!init.el

এই কনফিগারেশনটি আপনাকে যা প্রয়োজন তার পরিবর্তে আপনার যা প্রয়োজন তা মনোনিবেশ করার অনুমতি দেয়। .emacs.dউত্স কোড সংগ্রহস্থলের মতো নয়, যার অর্থ কেবল আপনার কোডটিই থাকে না তবে অন্যান্য সমস্ত স্বয়ংক্রিয়ভাবে উত্পাদিত বা অস্থায়ী ফাইলগুলি সেখানে যায়। আসলে কী হবে তা আপনি জানেন না So সুতরাং, " ডিফল্টরূপে সমস্ত উপেক্ষা করুন এবং আপনার যত্ন নেওয়া ফাইল যুক্ত করুন " আরও ভাল কৌশল, আইএমও।

বিটিডাব্লু, init.elমাল্টি-ফাইল স্কিম ব্যবহার না করে আমি বেশিরভাগ কনফিগারেশন রাখি । কারণটি হ'ল একটি বড় ফাইলটি আমাকে ক) আমার পছন্দসই কনফিগারেশনটিতে স্ট্যান্ডার্ড সরঞ্জামগুলি ব্যবহার করতে occurবা isearch-forwardসরাতে অনুমতি দেয়, খ) এমন ব্যবহার outshineযা আমার- init.el org-cycleসক্ষম করে তোলে , গ) আমার .gitignoreসর্বদা পরিবর্তন না করে ।

প্যাকেজ ম্যানেজার

আপনার সমস্ত সিস্টেমে আপনার Emacs সংস্করণ এবং প্যাকেজ সংস্করণ সিঙ্ক করার জন্য বিশেষ প্রয়োজন না থাকলে প্যাকেজগুলিকে গিটের আওতায় রাখবেন না। Package.elভাল. use-packageঠিক আছে। কাস্ক সুন্দর। আপনার প্যাকেজ পরিচালককে বেছে নিন এবং কেবল আপনার কনফিগারেশন ফাইলটি প্রতিশ্রুতি দিন তবে প্যাকেজটি নিজেই নয়।

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


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

6

আমার .hgignore এ নিম্নলিখিত জিনিসগুলি রয়েছে

  • emacs সার্ভার ফাইল
  • সাম্প্রতিক ফাইল: একটি মেশিনে ফাইলের পাথগুলি অন্য মেশিনে বোঝায় না
  • ইলপা / মেলপা ডিরেক্টরি: স্বয়ংক্রিয়ভাবে প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে এবং টান / পুশ বার সাশ্রয় করতে init ফাইলটি ব্যবহার করুন।

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


3

সময়ের সাথে সাথে প্যাকেজগুলি এতে প্রচুর পরিমাণে যুক্ত হয় ~/.emacsএবং আমি এগুলি একে একে আমার সাথে যুক্ত করে .gitignore। আমার private.elপাসওয়ার্ড, মেশিন নির্দিষ্ট কোড ইত্যাদি রয়েছে যা আমি ট্র্যাক করি না a

আমার এখন যা আছে

# Gitignore file

# Remove backup files
*#
*.
*.elc
*~
.#*

# Emacs packages
elpa/
var/

#  Emacs tmp files & Misc
/.mc-lists.el
/.DS_Store
/.emacs.desktop
/.emacs.desktop.lock
/.watsonresults
/ac-comphist.dat
/auto-save-list
/eshell/history
/eshell/lastdir
/newsticker/feeds/
/snippets/
/tramp
/url/cookies
/.python-environments/
/ido.last
/places
/private.el
/games/
/bookmarks
/projectile-bookmarks.eld
/projectile.cache

1

এটি আপনি কোন প্যাকেজ / বৈশিষ্ট্যগুলি ব্যবহার করেন তার উপর নির্ভর করে তাই এটি কৌশলপূর্ণ হতে পারে। বামসির দ্বারা উল্লিখিত ফাইলগুলির পাশাপাশি, উদাহরণস্বরূপ, আপনি যদি ডিয়ার-ইমগেশন ব্যবহার করেন তবে এটি থাম্বনেইসগুলি ক্যাশে করার জন্য একটি ডিরেক্টরি তৈরি করে। আপনি সম্ভবত .elc ফাইলগুলিকেও উপেক্ষা করতে চান।


1

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

মেশিনগুলির মধ্যে মার্জ করার সময়, আমি প্রথমে graftনতুন defaultশাখায় পরিবর্তন করে এবং তারপরে defaultশাখাটিকে অন্য কর্মক্ষেত্রের শাখায় মার্জ করি ।

উদাহরণ হিসাবে, আপনি আমার .emacs.d জানতে পারেন bitbucket উপর একটি সংক্ষিপ্ত ব্যবহার গাইড সঙ্গে একটি রিডমি সহ।

আপনি এই সেটআপটিতে org- মোড মার্জ ড্রাইভারটি যুক্ত করতে চাইতে পারেন ।


1

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

  1. .elcফাইলগুলি (কনফিগারেশন পরিবর্তনের সময় তাদের পুনরায় সংশোধন করা একটি বড় ঝামেলা এবং পুরানো elcফাইলগুলি থেকে বাগগুলি প্রায়শই ডিবাগ করার জন্য ব্যথা হয়)।
  2. পুরো elpaডিরেক্টরিটি (এবং সংস্করণ-পিনিং স্ট্যান্ডার্ড না হওয়া অবধি স্বয়ংক্রিয়ভাবে এটি পুনর্নির্মাণ যথেষ্ট নির্ভরযোগ্য নয়)।
  3. eshellইতিহাস এবং gnusফাইলগুলির মতো স্বয়ংক্রিয়ভাবে উত্পন্ন ফাইল।
  4. পাসওয়ার্ড এবং এপিআই কীগুলির মতো ব্যক্তিগত তথ্য।

(নোট করুন যে ক্রস-প্ল্যাটফর্মের সমস্যাগুলি তালিকায় নেই) একাধিক অপারেটিং সিস্টেম জুড়ে কাজ করে এমন একটি কনফিগারেশন থাকা সম্পূর্ণরূপে ঠিক করা উচিত)) গিটটি সিঙ্কিং সমাধান হিসাবে পরিবর্তে, আমি এটি কেবল একটি কোড ট্র্যাকিং সমাধান হিসাবে ব্যবহার করি use এবং ড্রপবক্স ব্যবহার করে সিঙ্ক করুন। এইভাবে, সংস্করণ নিয়ন্ত্রণে থাকা উচিত নয় এমন সমস্ত বিরক্তিকর ফাইলগুলির যত্ন নেওয়া হবে।

আমি না কিন্তু, আমার ড্রপবক্স কনফিগারেশন কারনের জন্য disappears যদি আমার কনফিগারেশন উৎস থেকে rebuildable হতে থাকার একটি লক্ষ্য আছে, তাই আমি সমস্ত ইনস্টল করা প্যাকেজ এবং যে কোন বস্তু সোর্সে ট্র্যাক রাখতে। আমার ব্যক্তিগত তথ্যও গিট সাবমডিউলে সংরক্ষণ করা হয়। তবে দিন-দিন সিঙ্কের জন্য, গিটটি কেবল একটি দুর্দান্ত সমাধান নয়।

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