সম্ভাব্য কারণ # 1 - লাইন সমাপ্তি স্বাভাবিককরণ
একটি পরিস্থিতি যা ঘটতে পারে তা হ'ল যখন প্রশ্নে থাকা ফাইলটি লাইন এন্ডিং (1) এর সঠিক কনফিগারেশন ছাড়াই সংগ্রহস্থলে পরীক্ষা করা হয়েছিল যার ফলশ্রুতিতে কোনও ভুল লাইন সমাপ্তি, বা মিশ্র লাইন সমাপ্তির সাহায্যে সংগ্রহস্থলের একটি ফাইল থাকে। নিশ্চিত করতে, যাচাই করুন যা git diff
কেবলমাত্র লাইনের শেষের পরিবর্তনগুলি দেখায় (এগুলি ডিফল্টরূপে দৃশ্যমান নাও হতে পারে, git diff | cat -v
ক্যারেজ রিটার্নকে আক্ষরিক হিসাবে দেখার চেষ্টা করুন^M
অক্ষর )।
পরবর্তীকালে, কেউ সম্ভবত লাইন এন্ডিংগুলি (2) স্বাভাবিক করার জন্য সেটিংটি যুক্ত .gitattributes
বা সংশোধন করেছে core.autocrlf
। .gitattributes
গ্লোবাল কনফিগারেশনের উপর ভিত্তি করে , গিট আপনার কার্যকরী অনুলিপিতে স্থানীয় পরিবর্তনগুলি প্রয়োগ করেছে যা অনুরোধ করা স্বাভাবিককরণের শেষ হওয়া লাইনটি প্রয়োগ করে। দুর্ভাগ্যক্রমে, কোনও কারণেgit reset --hard
এই লাইন স্বাভাবিককরণের পরিবর্তনগুলি পূর্বাবস্থায় ফিরে আসে না।
সমাধান
স্থানীয় লাইনের সমাপ্তিগুলি পুনরায় সেট করা এমন কর্মক্ষেত্রগুলি সমস্যার সমাধান করবে না। যতবারই ফাইলটি গিট দ্বারা "দেখা" হয়, এটি সাধারণীকরণ চেষ্টা করে পুনরায় প্রয়োগ করবে, ফলস্বরূপ একই সমস্যার ফলস্বরূপ।
সেরা বিকল্পটি হ'ল গিটটি রেপোর সাথে মেলে সমস্ত রেখার শেষকে স্বাভাবিক করে .gitattributes
এবং সেই পরিবর্তনগুলি সম্পাদন করে যা চায় তার স্বাভাবিকাকে প্রয়োগ করতে দেয় - গিট ফিল্টার-শাখার সাথে লাইন-এন্ডিংগুলি ঠিক করার চেষ্টা করা দেখুন , তবে ভাগ্য নেই ।
আপনি যদি সত্যিই ফাইলটিতে পরিবর্তনগুলি ম্যানুয়ালি চেষ্টা করে দেখতে চান এবং তা পরিবর্তন করতে চান তবে সবচেয়ে সহজ সমাধানটি হ'ল পরিবর্তিত ফাইলগুলি মুছে ফেলা হবে এবং তারপরে পুনরুদ্ধার করার জন্য গিটকে বলতে হবে, যদিও আমি নোট করেছি যে এই সমাধানটি 100% নিয়মিত কাজ করে না বলে মনে হচ্ছে সময় ( সতর্কতা: আপনার সংশোধিত ফাইলগুলির লাইন শেষের পরিবর্তে অন্য কোনও পরিবর্তন থাকলে এটি চালাবেন না !):
git status --porcelain | grep "^ M" | cut -c4- | xargs rm
git checkout -- .
মনে রাখবেন, যদি আপনি কোনও পর্যায়ে সংগ্রহস্থলের লাইনের শেষটিকে স্বাভাবিক না করেন তবে আপনি এই সমস্যাটি চালিয়ে যাবেন।
সম্ভাব্য কারণ # 2 - কেস সংবেদনশীলতা
দ্বিতীয় সম্ভাব্য কারণটি উইন্ডোজ বা ম্যাক ওএস / এক্সের ক্ষেত্রে সংবেদনশীলতা নয়। উদাহরণস্বরূপ, ভাণ্ডারগুলিতে নীচের মতো একটি পথ উপস্থিত রয়েছে বলুন:
/foo/bar
এখন লিনাক্সের কেউ ফাইলগুলিতে কমিট করে /foo/Bar
(সম্ভবত কোনও বিল্ড সরঞ্জাম বা সেই ডিরেক্টরি তৈরি করে এমন কিছু কারণে) এবং পুশ করে। লিনাক্সে এটি এখন দুটি পৃথক ডিরেক্টরি:
/foo/bar/fileA
/foo/Bar/fileA
এই রেপো উইন্ডোজ বা ম্যাক আউট চেক করা হচ্ছে পরিবর্তিত হতে পারে fileA
উইন্ডোজ চেক উপর রিসেট করা যাবে না, কারণ প্রতিটি রিসেট উপর, Git আউট /foo/bar/fileA
, এবং তারপর কারণ উইন্ডোজ কেস অবশ হল, বিষয়বস্তু মুছে ফেলা হয় fileA
সঙ্গে /foo/Bar/fileA
তাদের ফলে হচ্ছে "রুপান্তরিত",।
অন্য কেসটি পৃথক ফাইল (গুলি) হতে পারে যা রেপোতে উপস্থিত থাকে, যখন কোনও সংবেদনশীল ফাইল সিস্টেম পরীক্ষা করে দেখা গেলে ওভারল্যাপ হয়ে যায়। উদাহরণ স্বরূপ:
/foo/bar/fileA
/foo/bar/filea
অনুরূপ অন্যান্য পরিস্থিতিও থাকতে পারে যা এ জাতীয় সমস্যা তৈরি করতে পারে।
সংবেদনশীল ফাইল সিস্টেমে গিটটি সত্যই এই পরিস্থিতিটি সনাক্ত করতে হবে এবং একটি দরকারী সতর্কতা বার্তা প্রদর্শন করা উচিত, তবে এটি বর্তমানে তা নয় (ভবিষ্যতে এটি পরিবর্তিত হতে পারে - এই আলোচনা এবং git.git মেলিং তালিকায় সম্পর্কিত প্রস্তাবিত প্যাচগুলি দেখুন)।
সমাধান
সমাধানটি হ'ল গিট ইনডেক্সে ফাইলগুলির কেস এবং উইন্ডোজ ফাইল সিস্টেমের ক্ষেত্রে প্রান্তিককরণে আনতে হবে। এটি হয় লিনাক্সে করা যেতে পারে যা জিনিসগুলির সত্যিকারের অবস্থা প্রদর্শন করবে, বা উইন্ডোজে খুব দরকারী ওপেন সোর্স ইউটিলিটি গিট-ইউনিট সহ । গিট-ইউনিট গিট ইনডেক্সে প্রয়োজনীয় কেস পরিবর্তনগুলি প্রয়োগ করবে, যা পরে রেপোতে প্রতিশ্রুতিবদ্ধ হতে পারে।
(1) এটি সম্ভবত কেউ উইন্ডোজ ব্যবহার করে, প্রশ্নযুক্ত .gitattributes
ফাইলটির কোনও সংজ্ঞা ছাড়াই এবং ডিফল্ট গ্লোবাল সেটিংস core.autocrlf
যার জন্য রয়েছে তা false
দেখুন (দেখুন (2))।
(২) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
.
বর্তমান ডিরেক্টরিটি মূল ডিরেক্টরি নয়