আপনার ম্যাক-এ গিট যদি কোনো ফাইল উপেক্ষা করে, তবে টার্মিনালে রিপোজিটরি থেকে git check-ignore -v -- 'path/to/file' রান করুন। আউটপুটটি উপেক্ষার উৎস, লাইন নম্বর, ম্যাচিং প্যাটার্ন এবং পাথ চিহ্নিত করে, যাতে আপনি নিয়মটি খুঁজে পেয়ে তা পরিবর্তন করবেন কি না সিদ্ধান্ত নিতে পারেন। ফাইলটি যদি ইতিমধ্যেই ট্র্যাক করা হয়ে থাকে, তবে --no-index সহ চেকটি পুনরায় করুন।

রিপোজিটরি থেকে চেকটি রান করুন

টার্মিনাল খুলুন এবং রিপোজিটরির টপ-লেভেল ডিরেক্টরিতে যান। আপনি শেষে একটি স্পেস দিয়ে cd টাইপ করতে পারেন, এর পাথ ইনসার্ট করতে ফাইন্ডার থেকে প্রোজেক্ট ফোল্ডারটি টার্মিনাল উইন্ডোতে টেনে আনতে পারেন, তারপর Return চাপুন। git status দিয়ে নিশ্চিত করুন যে আপনি একটি গিট ওয়ার্কিং ট্রির ভেতরে আছেন; গিট যদি রিপোর্ট করে যে ডিরেক্টরিটি কোনো রিপোজিটরি নয়, তবে প্রথমে প্রোজেক্টের আসল রিপোজিটরি ফোল্ডারে যান।

রিপোজিটরি রুট অনুযায়ী ফাইলের আপেক্ষিক পাথটি ব্যবহার করুন। উদাহরণস্বরূপ, build/cache.json নির্ণয় করতে রান করুন:

git check-ignore -v -- 'build/cache.json'

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

নিয়মটি শনাক্ত করতে আউটপুটটি পড়ুন

একটি বিস্তারিত (verbose) মিল দেখতে এরকম হয়:

.gitignore:12:build/    build/cache.json

ফিল্ডগুলোর অর্থ হলো: .gitignore হলো সোর্স ফাইল, 12 হলো এর লাইন নম্বর, build/ হলো প্যাটার্ন এবং build/cache.json হলো আপনি যে পাথটির বিষয়ে কোয়েরি করেছেন। আপনার পছন্দের টেক্সট এডিটরে সেই সোর্স ফাইলটি খুলুন এবং উল্লিখিত লাইনটি পরীক্ষা করুন। সোর্সটি এর পরিবর্তে কোনো নেস্টেড .gitignore, .git/info/exclude বা আপনার গিট অ্যাকাউন্টের জন্য কনফিগার করা গ্লোবাল এক্সক্লুড ফাইলও হতে পারে। গিট ভার্বোস আউটপুট ফিল্ড এবং এই উপেক্ষার উৎসগুলো নথিভুক্ত করে রেখেছে।

.git/info/exclude-এর অধীনে থাকা কোনো সোর্স পাথ এই রিপোজিটরির ক্ষেত্রে প্রযোজ্য হলেও সাধারণত অন্যান্য ক্লোনের সাথে শেয়ার করা হয় না। একটি গ্লোবাল এক্সক্লুড ফাইল আপনার নিজস্ব রিপোজিটরিগুলোর ক্ষেত্রে প্রযোজ্য হয়। প্রোজেক্টের যে নিয়মটি সবার সাথে শেয়ার করা উচিত, তার জন্য .gitignore প্যাটার্নই সাধারণত সঠিক জায়গা। গিট অগ্রাধিকার ক্রম অনুযায়ী উপেক্ষার উৎসগুলো যাচাই করে: নিম্ন-স্তরের .gitignore ফাইলগুলো প্যারেন্ট নিয়মগুলোকে ওভাররাইড করতে পারে, এবং একই অগ্রাধিকার স্তরে থাকা সর্বশেষ ম্যাচিং প্যাটার্নটি ফলাফল নির্ধারণ করে। The gitignore manual explains the precedence and intended use of each source.

গিট যদি কিছু প্রিন্ট না করে

কোনো আউটপুট না থাকার অর্থ সাধারণত এই যে, কোনো ইগনোর প্যাটার্ন সেই পাথের সাথে মেলেনি। কমান্ডের সাধারণ আউটপুট শুধু উপেক্ষিত পাথগুলোর তালিকা দেয়; মূল প্যাটার্নটি দেখতে -v ব্যবহার করুন। আপনি সঠিক রিপোজিটরিতে আছেন কি না এবং পাথের বানান ও ক্যাপিটালাইজেশন হুবহু সঠিক কি না তা পরীক্ষা করুন।

ট্র্যাক করা ফাইলগুলো বিভ্রান্তির একটি সাধারণ কারণ: ডিফল্টভাবে, git check-ignore সেগুলো রিপোর্ট করে না কারণ ইগনোর নিয়মগুলো কেবল সেই ফাইলগুলোর ক্ষেত্রে প্রযোজ্য যা এখনও ট্র্যাক করা হয়নি। গিটকে নিয়মগুলো যাচাই করতে বাধ্য করতে --no-index যোগ করুন:

git check-ignore -v --no-index -- 'build/cache.json'

এই অপশনটি নিয়মটি নির্ণয় করে; এটি ফাইলটিকে আনট্র্যাক করে না বা কোনো কমিট থেকে মুছে ফেলে না। ট্র্যাকিং বন্ধ করার জন্য গিটের নথিবদ্ধ পদ্ধতি হলো git rm --cached, যার পরে একটি উপযুক্ত ইগনোর নিয়ম যোগ করতে হয়। এটি ইনডেক্স পরিবর্তন করে, তাই রান করার আগে স্ট্যাটাস ভালোভাবে দেখে নিন এবং এর প্রভাব বুঝে নিন। গিট ট্র্যাক করা ফাইলের সীমাবদ্ধতা এবং --no-index অপশনটি ব্যাখ্যা করেছে।

নেগেশন এবং প্যাটার্নের পরিধি পরীক্ষা করুন

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

প্যাটার্নগুলোকে সেগুলোর অন্তর্ভুক্ত .gitignore ফাইলের সাপেক্ষে ব্যাখ্যা করা হয়। স্ল্যাশযুক্ত একটি প্যাটার্ন সেই ফাইলের ডিরেক্টরি স্তরের মধ্যেই সীমাবদ্ধ থাকে; একটি সাধারণ নামের প্যাটার্ন সেই স্তরে এবং তার নিচেও মিলতে পারে। কোনো নেস্টেড .gitignore থেকে কোনো নিয়ম আসলে এটি গুরুত্বপূর্ণ হয়ে ওঠে: প্রিন্ট হওয়া প্যাটার্নটি দেখতে সঠিক মনে হলেও তা প্রত্যাশার চেয়ে ভিন্ন সাবট্রিতে প্রযোজ্য হতে পারে। সোর্স ফাইলের অবস্থানের পাশাপাশি প্যাটার্ন টেক্সটও যাচাই করুন।

একটি ফাইলের জন্য, কোথায় দেখতে হবে তা চিহ্নিত করতে সাধারণত git check-ignore -v-ই যথেষ্ট। ট্র্যাক করা ফাইলের ক্ষেত্রে --no-index অন্তর্ভুক্ত করুন; এরপর, রিপোর্ট করা সোর্স, লাইন এবং প্যাটার্ন ব্যবহার করে নিয়মটি পরিবর্তন, সংকুচিত বা অপরিবর্তিত রাখা হবে কি না তা নির্ধারণ করুন।

তথ্যসূত্র