ফাইলের নামের এমন কোনো পরিবর্তন যা শুধুমাত্র ছোট/বড় হাতের অক্ষর পরিবর্তন করে—যেমন readme.md থেকে README.md—তা গিট-এ রেকর্ড করতে, টার্মিনালে রিপোজিটরি থেকে git mv চালান, তারপর git status দিয়ে স্টেজ করা পরিবর্তনটি পরীক্ষা করুন। অনেক ম্যাক-এ, ডিফল্ট APFS ফরম্যাট ফাইলের নামের কেস সংরক্ষণ করলেও কেস অনুযায়ী নামগুলোর মধ্যে পার্থক্য করে না, তাই ফাইন্ডার দিয়ে নাম পরিবর্তন করলে বা সাধারণ mv কমান্ড ব্যবহার করলে গিট এই পার্থক্যটি শনাক্ত করতে নাও পারতে পারে। অ্যাপল উল্লেখ করেছে যে APFS-কে কেস-সেনসিটিভ হিসেবেও ফরম্যাট করা যেতে পারে, তাই আচরণটি ভলিউমের উপর নির্ভর করে। Apple Developer: Files and directories
git mv দিয়ে ট্র্যাক করা ফাইলের নাম পরিবর্তন করুন
টার্মিনালে, ফাইলটি থাকা রিপোজিটরিতে যান। নিচের উদাহরণের পাথগুলোকে আপনার বর্তমান এবং কাঙ্ক্ষিত সঠিক পাথ দিয়ে প্রতিস্থাপন করুন। কোনো নামে স্পেস বা শেল মেটাক্যারেক্টার থাকলে প্রতিটি পাথ কোটেশনের মধ্যে রাখা একটি ভালো অভ্যাস।
git mv 'src/readme.md' 'src/README.md'
git status
গিট-এর git mv কমান্ড ওয়ার্কিং-ট্রি পাথটির নাম পরিবর্তন করে এবং ইনডেক্স আপডেট করে; পরিবর্তনটি স্টেজ হয়ে যায়, তবে এর জন্য এখনও একটি কমিট প্রয়োজন। গিট ম্যানুয়াল অনুযায়ী সোর্স পাথটির অস্তিত্ব থাকা আবশ্যক এবং একটি সফল স্থানান্তরের পরেই ইনডেক্স আপডেট হয় বলে উল্লেখ করা হয়েছে। গিটহাবের ডকুমেন্টেড কমান্ড-লাইন ওয়ার্কফ্লোতেও একইভাবে git mv চালানোর পর git status পরীক্ষা করার সুপারিশ করা হয়েছে। git-mv documentation GitHub Docs: Renaming a file
সফল হলে, পুরোনো পাথ থেকে নতুন পাথে একটি স্টেজড রিনেমের জন্য স্ট্যাটাস আউটপুট পরীক্ষা করুন। কমিট করার আগে সম্পূর্ণ স্টেজ করা পরিবর্তনটি পর্যালোচনা করুন, বিশেষ করে যদি আপনি ফাইলটি সম্পাদনাও করে থাকেন:
git diff --cached --summary
git diff --cached -- 'src/README.md'
সামারি পাথের পরিবর্তন নিশ্চিত করতে সহায়তা করে; দ্বিতীয় কমান্ডটি আপনাকে সেই পাথের জন্য স্টেজ করা বিষয়বস্তু পরীক্ষা করতে দেয়। কিছু ক্ষেত্রে গিট একটি রিনেমকে ডিলিশন এবং অ্যাডিশন হিসেবে দেখাতে পারে, কারণ রিনেমের উপস্থাপনা ফাইলের বিষয়বস্তু এবং হিস্ট্রি থেকে অনুমান করা হয়। এখানে মূল যাচাই হলো ইনডেক্সে যেন কাঙ্ক্ষিত পাথটি থাকে এবং কোনো অনিচ্ছাকৃত স্টেজড পরিবর্তন না থাকে।
সরাসরি কেস পরিবর্তনের রিনেম ব্যর্থ হলে
কিছু কেস-ইনসেনসিটিভ ভলিউম বা গিট সেটআপ এমন সরাসরি স্থানান্তর গ্রহণ করে না যার সোর্স এবং ডেস্টিনেশন শুধুমাত্র ছোট/বড় হাতের অক্ষরে ভিন্ন। ভিন্ন বানানের একটি অস্থায়ী নাম ব্যবহার করুন, তারপর সেই অস্থায়ী পাথটিকে চূড়ান্ত নামে স্থানান্তর করুন:
git mv 'src/readme.md' 'src/readme-case-tmp.md'
git mv 'src/readme-case-tmp.md' 'src/README.md'
git status
অস্থায়ী পাথটি যেন আগে থেকেই বিদ্যমান না থাকে। উভয় কমান্ড চালানোর পর, নিশ্চিত করুন যে স্ট্যাটাসে শুধুমাত্র কাঙ্ক্ষিত পুরোনো-থেকে-নতুন রিনেমটি দেখাচ্ছে এবং স্টেজ করা ডিফারেন্সটি পরীক্ষা করুন। এই দ্বি-ধাপ পদ্ধতিটি ফাইলসিস্টেমকে পার্থক্য করার জন্য একটি মধ্যবর্তী নাম দেয়, আর প্রতিটি সফল ধাপে git mv গিট-এর ইনডেক্স আপডেট করে। যেকোনো একটি কমান্ড এরর দিলে, পুনরায় চেষ্টা করার আগে থেমে যান এবং git status ও ডিরেক্টরিটি পরীক্ষা করুন; ডেস্টিনেশন ওভাররাইট করা উদ্দেশ্যমূলকভাবে করা হচ্ছে তা নিশ্চিত না হওয়া পর্যন্ত -f যোগ করবেন না।
রিপোজিটরির কেস হ্যান্ডলিং পরীক্ষা করুন
গিট-এর core.ignoreCase সেটিং সেই ফাইলসিস্টেমগুলোর জন্য বিকল্প ব্যবস্থা সক্রিয় করে যা অক্ষরের কেস পার্থক্য করে না। গিট নথিপত্রে উল্লেখ রয়েছে যে clone এবং init ফাইলসিস্টেম পরীক্ষা করে এবং উপযুক্ত হলে এই মানটি সেট করে; এটি সতর্কও করে যে এটি পরিবর্তন করলে অপ্রত্যাশিত আচরণ হতে পারে। আপনি কার্যকর সেটিংটি দেখতে পারেন এর মাধ্যমে: git-config documentation
git config --get core.ignoreCase
যদি কোনো মান প্রিন্ট না হয়, তবে এই কমান্ডটি কার্যকর কনফিগারেশনে কোনো সেটিং পায়নি। git config core.ignoreCase false করাকে সমাধান হিসেবে গণ্য করা এড়িয়ে চলুন: এটি গিট-এর অনুমান পরিবর্তন করে, কিন্তু একটি কেস-ইনসেনসিটিভ macOS ভলিউমকে একই ডিরেক্টরিতে কেবল কেসে ভিন্ন এমন দুটি নাম সংরক্ষণ করার সক্ষমতা প্রদান করে না। সেটিংটির ডকুমেন্টেড উদ্দেশ্য হলো গিট-কে আসল ফাইলসিস্টেম আচরণের সাথে কাজ করতে সাহায্য করা, সেই আচরণ পরিবর্তন করা নয়।
রিনেম নিশ্চিত করুন, কমিট করুন এবং শেয়ার করুন
কমিট করার আগে, git status-এ চূড়ান্ত বানান যাচাই করুন, স্টেজ করা সামারিটি পরীক্ষা করুন এবং নিশ্চিত হন যে সম্পর্কহীন পরিবর্তনগুলো অন্তর্ভুক্ত হয়নি। স্টেজ করা রিনেমটি সঠিক হলে, একটি স্পষ্ট মেসেজ সহ এটি কমিট করুন:
git commit -m "Rename readme file to uppercase"
আপনি যদি কমিটটি শেয়ার করতে চান, তবে আপনার রিপোজিটরির সাধারণ রিমোট এবং ব্রাঞ্চ ওয়ার্কফ্লো ব্যবহার করে ব্রাঞ্চটি পুশ করুন। রিনেমটি কমিটে রেকর্ড করা হয়; আপনি পুশ করার পরেই কেবল রিমোট এটি পাবে। একটি কেস-সেনসিটিভ APFS ভলিউমে, শুধুমাত্র কেস ভিন্ন হওয়া নামগুলো পৃথক হতে পারে, যেখানে ডিফল্ট কেস-ইনসেনসিটিভ কনফিগারেশন সেগুলোকে একই নাম হিসেবে বিবেচনা করে। বিশ্বস্ত লোকাল যাচাইকরণ হলো গিট-এর ইনডেক্স এবং স্টেজ করা স্ট্যাটাসে কাঙ্ক্ষিত ডেস্টিনেশন পাথটি দেখাচ্ছে কিনা তা নিশ্চিত করা। Apple Support: File system formats available in Disk Utility on Mac
তথ্যসূত্র
git-mv — Git
git-config — Git
Files and directories — Apple Developer
Renaming a file — GitHub Docs
File system formats available in Disk Utility on Mac — Apple Support