আউটপুট পার্সিং git statusকরা একটি খারাপ ধারণা কারণ আউটপুটটি মানুষের পাঠযোগ্য, মেশিন-পঠনযোগ্য নয়। গিটারের ভবিষ্যতের সংস্করণগুলিতে বা আলাদাভাবে কনফিগার করা পরিবেশে আউটপুট একই থাকবে এমন কোনও গ্যারান্টি নেই।
ইউভিভি মন্তব্য সঠিক ট্র্যাকের উপর রয়েছে, তবে দুর্ভাগ্যক্রমে git statusযখন অনির্দিষ্ট পরিবর্তন রয়েছে তখন রিটার্ন কোডের পরিবর্তন হয় না। তবে এটি --porcelainঅপশন সরবরাহ করে, যার ফলে git status --porcelainস্ক্রিপ্টগুলির জন্য আউটপুটটিকে সহজে পার্সে ফর্ম্যাটে ফর্ম্যাট করা যায় এবং গিট সংস্করণ জুড়ে এবং ব্যবহারকারী কনফিগারেশন নির্বিশেষে স্থিতিশীল থাকবে।
আমরা git status --porcelainএকটি নির্দেশক হিসাবে খালি আউটপুট ব্যবহার করতে পারি যে প্রতিশ্রুতিবদ্ধ হওয়ার কোনও পরিবর্তন নেই:
if [ -z "$(git status --porcelain)" ]; then
# Working directory clean
else
# Uncommitted changes
fi
যদি আমরা ওয়ার্কিং ডিরেক্টরিতে তালিকার চিহ্নবিহীন ফাইলগুলি যত্ন না করি তবে আমরা --untracked-files=noসেগুলি উপেক্ষা করার বিকল্পটি ব্যবহার করতে পারি :
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
# Working directory clean excluding untracked files
else
# Uncommitted changes in tracked files
fi
এই বেশি শর্ত বিরুদ্ধে জোরালো করতে আসলে কারণ git statusআউটপুট ছাড়া ব্যর্থ করার জন্য stdout, আমরা চেক পরিমার্জন করতে পারেন:
if output=$(git status --porcelain) && [ -z "$output" ]; then
# Working directory clean
else
# Uncommitted changes
fi
এটা যে এর মূল্য যদিও git statusযখন কাজ ডিরেক্টরি অশুচি অর্থপূর্ণ প্রস্থান কোড দেয় না, git diffপ্রদান করে --exit-codeবিকল্প, যা এটি অনুরূপ আচরণ তোলে পরিবর্তন ইউটিলিটি, যে, অবস্থা সঙ্গে থেকে প্রস্থান হয় 1যখন পার্থক্য ছিল এবং 0যখন কেউ খুঁজে পাওয়া যায়নি।
এটি ব্যবহার করে, আমরা এগুলি ছাড়াই পরিবর্তনগুলি পরীক্ষা করতে পারি:
git diff --exit-code
এবং মঞ্চস্থ হয়েছে, তবে এর সাথে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি করা হয়নি:
git diff --cached --exit-code
যদিও git diffউপযুক্ত আর্গুমেন্টের মাধ্যমে সাবমডিউলগুলিতে অন্যাক্র্যাকড ফাইলগুলির বিষয়ে প্রতিবেদন করতে পারেন --ignore-submodules, দুর্ভাগ্যবশত মনে হচ্ছে এটি প্রকৃত কার্যকারী ডিরেক্টরিতে তালিকার চিহ্নবিহীন ফাইলগুলিতে রিপোর্ট করার কোনও উপায় নেই। যদি ওয়ার্কিং ডিরেক্টরিতে তালিকাভুক্ত ফাইলগুলি প্রাসঙ্গিক git status --porcelainহয় তবে সম্ভবত সেরা বেট।