আমি মনে করি না যে গিট কমিট "এই ফাইলটি ট্র্যাক করা বন্ধ করুন, তবে এটি মুছবেন না" এর মতো কোনও উদ্দেশ্য রেকর্ড করতে পারে।
এই জাতীয় উদ্দেশ্য কার্যকর করার জন্য গিটের বাইরে কোনও রিপোজিটরিগুলিতে হস্তক্ষেপের প্রয়োজন হবে যা ফাইলটি মুছে ফেলা একটি প্রতিশ্রুতি সংহত করে (বা পুনরায় শোধ করবে)।
একটি অনুলিপি সংরক্ষণ করুন, মুছে ফেলা প্রয়োগ করুন, পুনরুদ্ধার করুন
সম্ভবত সবচেয়ে সহজ কাজটি হ'ল আপনার ডাউনস্ট্রিম ব্যবহারকারীদের ফাইলটির একটি অনুলিপি সংরক্ষণ করতে, আপনার মুছতে টানতে, এবং ফাইলটি পুনরুদ্ধার করতে। যদি তারা পুনর্বাসনের মাধ্যমে টানতে থাকে এবং ফাইলে পরিবর্তন আনতে থাকে তবে তারা দ্বন্দ্ব পাবে। এই জাতীয় দ্বন্দ্ব সমাধানের জন্য, ব্যবহার করুন git rm foo.conf && git rebase --continue
(যদি বিরোধী প্রতিশ্রুতি মুছে ফেলা ফাইলগুলি ছাড়াও পরিবর্তিত হয়) বা git rebase --skip
(যদি বিবাদী প্রতিশ্রুতি কেবলমাত্র সরানো ফাইলটিতে পরিবর্তিত হয়)।
এটি মুছে ফেলা একটি প্রতিশ্রুতি সরিয়ে দেওয়ার পরে ফাইলটিকে অবরুদ্ধ হিসাবে পুনরুদ্ধার করুন
যদি তারা ইতিমধ্যে আপনার মোছার প্রতিশ্রুতিটি টানতে থাকে তবে তারা গিট শো সহ ফাইলটির পূর্ববর্তী সংস্করণটি পুনরুদ্ধার করতে পারে :
git show @{1}:foo.conf >foo.conf
বা গিট চেকআউট সহ (উইলিয়াম পার্সেলের মন্তব্য অনুসারে; তবে এটি সূচী থেকে আবার সরিয়ে ফেলতে ভুলবেন না!):
git checkout @{1} -- foo.conf && git rm --cached foo.conf
যদি তারা আপনার মোছা টানানোর পরে অন্য পদক্ষেপ নিয়ে থাকে (বা তারা রিবেসটি একটি বিচ্ছিন্ন হেডের দিকে টানছে), তাদের ছাড়া অন্য কিছু প্রয়োজন হতে পারে @{1}
। তারা git log -g
আপনার মোছা টানার আগেই তারা প্রতিশ্রুতি সন্ধান করতে পারে।
একটি মন্তব্যে, আপনি উল্লেখ করেছেন যে ফাইলটি আপনি "আনট্র্যাক করতে চান, তবে রাখুন" এমন এক ধরণের কনফিগারেশন ফাইল যা সফ্টওয়্যারটি চালানোর জন্য প্রয়োজনীয় (সরাসরি কোনও সংগ্রহশালার বাইরে)।
ফাইলটিকে একটি 'ডিফল্ট' হিসাবে রাখুন এবং ম্যানুয়ালি / স্বয়ংক্রিয়ভাবে এটি সক্রিয় করুন
যদি সম্পূর্ণরূপে সংগ্রহস্থলের মধ্যে কনফিগারেশন ফাইল বিষয়বস্তু বজায় রাখা অব্যাহত রাখার জন্য অগ্রহণযোগ্য না হয় তবে আপনি (যেমন) থেকে ট্র্যাক ফাইল নামান্তর করতে সক্ষম হতে পারেন foo.conf
থেকে foo.conf.default
এবং তারপর আপনার ব্যবহারকারীদের নির্দেশ cp foo.conf.default foo.conf
প্রয়োগের পুনঃনামকরণ কমিট পরে। অথবা, ব্যবহারকারীরা ইতিমধ্যে Makefile
আপনার সফ্টওয়্যারটি লঞ্চ / স্থাপনের জন্য সংগ্রহস্থলের কিছু বিদ্যমান অংশ (উদাহরণস্বরূপ কোনও সংগ্রহশালা (যেমন বা অনুরূপ) দ্বারা সামগ্রী দ্বারা কনফিগার করা স্ক্রিপ্ট বা অন্য কোনও প্রোগ্রাম ) ব্যবহার করে, আপনি লঞ্চ / ডিফল্টে ডিফল্ট পদ্ধতিটি অন্তর্ভুক্ত করতে পারেন / প্রক্রিয়া মোতায়েন করুন:
test -f foo.conf || test -f foo.conf.default &&
cp foo.conf.default foo.conf
জায়গায় এই ধরনের একটি খেলাপি ব্যবস্থায়, ব্যবহারকারীরা একটি যে renames কমিট টান করতে সক্ষম হওয়া উচিত foo.conf
করতে foo.conf.default
কোন অতিরিক্ত কাজ না করেও। এছাড়াও, আপনি যদি ভবিষ্যতে অতিরিক্ত ইনস্টলেশন / সংগ্রহস্থলগুলি তৈরি করেন তবে ম্যানুয়ালি একটি কনফিগারেশন ফাইল অনুলিপি করা থেকে বিরত থাকতে হবে।
পুনর্লিখনের ইতিহাসকে যাইহোক ম্যানুয়াল হস্তক্ষেপ প্রয়োজন ...
যদি সংগ্রহস্থলটিতে বিষয়বস্তু বজায় রাখা অগ্রহণযোগ্য হয় তবে আপনি সম্ভবত ইতিহাসের মতো কিছু দিয়ে এটি পুরোপুরি মুছে ফেলতে চাইবেন git filter-branch --index-filter …
। Rewriting ইতিহাস, যা প্রতিটি শাখা / সংগ্রহস্থলের জন্য ম্যানুয়াল হস্তক্ষেপের প্রয়োজন হবে এই পরিমাণে (দেখুন "আপস্ট্রিম রি-বেসের ফলে থেকে পুনরুদ্ধার" বিভাগের Git রি-বেসের ফলে র manpage )। আপনার কনফিগারেশন ফাইলের জন্য প্রয়োজনীয় বিশেষ চিকিত্সা পুনর্লিখন থেকে পুনরুদ্ধার করার সময় অবশ্যই অন্য একটি পদক্ষেপ করা উচিত:
- কনফিগারেশন ফাইলের একটি অনুলিপি সংরক্ষণ করুন।
- পুনর্লিখন থেকে পুনরুদ্ধার।
- কনফিগারেশন ফাইলটি পুনরুদ্ধার করুন।
পুনরাবৃত্তি রোধ করতে এটি উপেক্ষা করুন
আপনি যে কোনও পদ্ধতি ব্যবহার করুন না কেন আপনি সম্ভবত কনফিগারেশন ফাইলের নামটি একটি .gitignore
ফাইলের মধ্যে সংগ্রহস্থলের মধ্যে অন্তর্ভুক্ত করতে চাইবেন যাতে অজান্তে কেউ আর অবিচ্ছিন্নভাবে git add foo.conf
না পারে (এটি সম্ভব, তবে প্রয়োজন -f
/ --force
)। আপনার যদি একাধিক কনফিগারেশন ফাইল থাকে তবে আপনি সেগুলি একটি একক ডিরেক্টরিতে স্থানান্তরিত করা এবং পুরো জিনিসটিকে উপেক্ষা করে বিবেচনা করতে পারেন ('মুভিং' এর অর্থ প্রোগ্রামটি যেখানে কনফিগারেশন ফাইলগুলি আবিষ্কার করবে এবং ব্যবহারকারীদের পেতে পারে এমনটি পরিবর্তন করে) (বা ফাইলগুলি তাদের নতুন স্থানে অনুলিপি / সরাতে লঞ্চ / মোতায়েন করার পদ্ধতি); আপনি সম্ভবত এমভি কোনও ফাইলকে কোনও ডিরেক্টরিতে গিটিং করতে চান না যা আপনি উপেক্ষা করবেন)।