আপনার Mac-এর ওয়ার্কিং ফোল্ডারের কোনো ফাইলে যদি version https://git-lfs.github.com/spec/v1 দিয়ে শুরু হওয়া টেক্সট থাকে, তবে আপনি বড় ফাইলের বিষয়বস্তুর পরিবর্তে সেটির Git LFS পয়েন্টার দেখতে পাচ্ছেন। Terminal-এ রিপোজিটরিতে যান, নিশ্চিত করুন যে Git LFS ইনস্টল ও ইনিশিয়ালাইজ করা আছে, তারপর git lfs pull চালান। এই কমান্ডটি চেকআউট করা ব্রাঞ্চের জন্য LFS অবজেক্ট ডাউনলোড করে এবং ওয়ার্কিং ফাইলগুলো আপডেট করে। এটি কেবল সেই কনটেন্টই পুনরুদ্ধার করতে পারে যা কনফিগার করা রিমোটে পাওয়া যায় অথবা ইতিমধ্যেই লোকাল LFS ক্যাশে রয়েছে। Git LFS FAQ
১. Terminal-এ রিপোজিটরি খুলুন এবং ফাইলটি যে পয়েন্টার তা নিশ্চিত করুন
Terminal খুলুন এবং রিপোজিটরি ডিরেক্টরিতে যান। ফোল্ডারটি কোথায় আছে সে সম্পর্কে নিশ্চিত না হলে, cd টাইপ করুন (শেষে একটি স্পেস সহ), Finder থেকে রিপোজিটরি ফোল্ডারটি টেনে Terminal উইন্ডোতে এনে ফেলুন, তারপর Return চাপুন। আপনি একটি Git working tree-তে আছেন কিনা তা পরীক্ষা করুন এবং আসল পাথটি বসিয়ে ফাইলটি পরিদর্শন করুন:
git status --short
head -n 3 'path/to/file.ext'
একটি সাধারণ পয়েন্টারে একটি version লাইন, একটি oid sha256: লাইন এবং একটি size লাইন থাকে। Git LFS এই ছোট পয়েন্টারটি Git-এ সংরক্ষণ করে এবং আসল বিষয়বস্তু LFS স্টোরেজে থাকে। কোনো টেক্সট এডিটরে পয়েন্টারটি দেখার অর্থ এই নয় যে এডিটরটি অনুপস্থিত অবজেক্টটি ফিরিয়ে আনতে পারবে; পুনরুদ্ধার Git LFS-এর মাধ্যমেই সম্পন্ন করা হয়। Git LFS overview
২. প্রয়োজনে Git LFS ইনস্টল ও ইনিশিয়ালাইজ করুন
কমান্ডটি উপলব্ধ কিনা তা পরীক্ষা করুন:
git lfs version
Terminal যদি জানায় যে lfs কোনো Git কমান্ড নয়, তবে আপনার Mac-এর জন্য একটি নির্ভরযোগ্য ইনস্টলেশন পদ্ধতি ব্যবহার করে Git LFS ইনস্টল করুন, তারপর একটি নতুন Terminal উইন্ডো খুলে আবার পরীক্ষা করুন। প্রজেক্টের ডকুমেন্টেশন অনুযায়ী ব্যবহারকারী অ্যাকাউন্টের জন্য git lfs install হলো এককালীন সেটআপ; Git-এর LFS ফিল্টার এবং হুক কনফিগার করতে এটি চালান:
git lfs install
এই সেটআপটি ফাইলের বিষয়বস্তু ডাউনলোড করার চেয়ে আলাদা। ক্লোন বা চেকআউটের সময় LFS বাদ পড়ে গিয়ে থাকলে, Git LFS-এর FAQ বিশেষভাবে ওয়ার্কিং ট্রির পয়েন্টারগুলো প্রতিস্থাপন করার জন্য git lfs pull চালানোর পরামর্শ দেয়। Git LFS FAQ
৩. বর্তমান ব্রাঞ্চের ফাইলগুলো ডাউনলোড এবং পুনরুদ্ধার করুন
রিপোজিটরি ডিরেক্টরি থেকে চালান:
git lfs pull
এই কমান্ডটি ডিফল্ট রিমোট থেকে বর্তমান ref-এর জন্য LFS কনটেন্ট ফেচ (fetch) করে এবং প্রয়োজনীয় ওয়ার্কিং-ট্রি ফাইলগুলো চেকআউট করে। সাধারণ কোনো ক্লোনের ক্ষেত্রে যেখানে পয়েন্টারটি আপনার চেকআউট করা ব্রাঞ্চেরই অংশ, এটিই পুনরুদ্ধারের সবচেয়ে সহজ ধাপ। কমান্ডটি শেষ হওয়া পর্যন্ত অপেক্ষা করুন এবং কোনো ত্রুটি থাকলে তা পড়ুন; এর পরেও কোনো পয়েন্টার থেকে যাওয়ার অর্থ হলো সেই ফাইলের ডাউনলোড বা চেকআউট সম্পূর্ণ হয়নি। Git LFS command reference
আপনি যদি আগেই অবজেক্টটি ফেচ করে থাকেন কিন্তু ওয়ার্কিং ফাইলে এখনও পয়েন্টার থাকে, তবে চেষ্টা করুন:
git lfs checkout -- 'path/to/file.ext'
git lfs checkout লোকাল LFS স্টোরে থাকা কনটেন্ট ব্যবহার করে; এটি নতুন করে কিছু ডাউনলোড করে না। এটি অনুপস্থিত ফাইল বা মিল থাকা পয়েন্টারযুক্ত ফাইল পুনরুদ্ধার করে, এবং পরিবর্তিত কোনো ফাইল ওভাররাইট করে না। এটি একটি সফল ফেচ-এর পরে কার্যকর, তবে এটি এমন কোনো অবজেক্ট পুনরুদ্ধার করতে পারে না যা লোকালভাবে ক্যাশ করা নেই কিংবা সফলভাবে ফেচ করা হয়নি। git-lfs-checkout manual
৪. ফাইলটিতে যদি এখনও পয়েন্টার প্রদর্শিত হয়
প্রত্যাশিত পাথটি LFS দ্বারা ট্র্যাক করা হচ্ছে কিনা এবং রিপোজিটরিতে কোনো রিমোট কনফিগার করা আছে কিনা তা পরীক্ষা করুন:
git lfs ls-files
git remote -v
git lfs ls-files-এ যদি ফাইলটি তালিকাভুক্ত না থাকে, তবে নিশ্চিত করুন যে বর্তমান ব্রাঞ্চের কমিট করা .gitattributes নিয়মাবলীতে এর পাথটি LFS-এর জন্য চিহ্নিত করা আছে। এই মুহূর্তে কেবল git lfs track চালালেই পুরোনো কনটেন্ট ফিরে আসবে না, এবং ট্র্যাকিংয়ের নিয়ম পরিবর্তন করলেই একটি সাধারণ Git ব্লব (blob) LFS অবজেক্টে রূপান্তরিত হয় না। Git LFS উল্লেখ করে যে রিপোজিটরিতে ইতিমধ্যেই থাকা ফাইলগুলোকে রূপান্তর করতে রিনর্মালাইজেশন এবং একটি কমিটের প্রয়োজন হয়; শুধুমাত্র একটি ফাইল পুনরুদ্ধার করার জন্য রিপোজিটরিতে এই ধরনের পরিবর্তন করবেন না। Git LFS FAQ
ফাইলটি তালিকাভুক্ত থাকলে, নিশ্চিত করুন যে আপনি কাঙ্ক্ষিত ভার্সন সংবলিত ব্রাঞ্চে আছেন এবং কনফিগার করা রিমোটটিই সেই রিপোজিটরি যেখানে এর LFS অবজেক্টগুলো সংরক্ষিত আছে। কনফিগার করা ভিন্ন কোনো রিমোটের জন্য, সেই রিমোটটি ফেচ করুন এবং তারপর লোকাল ক্যাশ থেকে পুনরুদ্ধার করুন:
git lfs fetch 'remote-name'
git lfs checkout -- 'path/to/file.ext'
git lfs fetch অবজেক্ট ডাউনলোড করে কিন্তু ওয়ার্কিং কপি আপডেট করে না; git lfs checkout সেই লোকাল আপডেটটি সম্পন্ন করে। ডিফল্টভাবে বর্তমান ref ফেচ করার ক্ষেত্রে ডিফল্ট রিমোট ব্যবহার করা হয়, যা Git-এর রিমোট নির্বাচনের নিয়ম অনুসরণ করে। git-lfs-fetch manual
একটি ব্যর্থ pull কমান্ড সংযোগ, প্রমাণীকরণ (authentication), অ্যাক্সেস বা অনুপস্থিত-অবজেক্ট সংক্রান্ত কোনো সমস্যার ইঙ্গিত দিতে পারে। কনফিগার করা Git/LFS সার্ভারে অ্যাক্সেস ঠিক করুন এবং পুনরায় চেষ্টা করুন। LFS সার্ভারে যদি অবজেক্টটি আর না থাকে, তবে শুধুমাত্র পয়েন্টার দিয়ে মূল ফাইলটি পুনর্নির্মাণ করা সম্ভব নয়: রিপোজিটরি রক্ষণাবেক্ষণকারীর কাছে জানতে চান যে অন্য কোনো ব্রাঞ্চ, ব্যাকআপ, ক্লোন বা অনুমোদিত LFS স্টোরে এটি রয়েছে কিনা। পয়েন্টারটি আন্দাজ করা কোনো কনটেন্ট দিয়ে প্রতিস্থাপন করা বা এটিকেই পুনরুদ্ধার করা ফাইল মনে করে কমিট করা এড়িয়ে চলুন।
পুনরুদ্ধার নিশ্চিত করুন
সফলভাবে pull বা checkout করার পর, ফাইলটি আবার পরীক্ষা করুন। এর প্রথম লাইনগুলোতে আর LFS পয়েন্টার মেটাডাটা থাকা উচিত নয়; পুনরুদ্ধার করা কনটেন্টটি খোলে কিনা তা নিশ্চিত করতে ফাইলটির ধরনের জন্য উপযুক্ত অ্যাপ্লিকেশনটি ব্যবহার করুন। একই সাথে git status --short পরীক্ষা করুন। আপনার ওয়ার্কিং কপিতে পয়েন্টার থেকে থাকলে কনটেন্টে পরিবর্তন প্রত্যাশিত হতে পারে, তবে কোনো কিছু স্টেজ বা কমিট করার আগে প্রদর্শিত পাথটি পর্যালোচনা করে নিন।
সূত্রসমূহ
git-lfs-faq(7) — Git LFS
git-lfs(1) — Git LFS
git-lfs-checkout(1) — Git LFS
git-lfs-fetch(1) — Git LFS