গিটারকে নির্ভরযোগ্যভাবে "স্ক্রিপ্টিং" এর মূল কী হ'ল 'প্লাম্বিং' কমান্ড ব্যবহার করা।
প্লাম্বিং কমান্ডগুলি পরিবর্তন করার সময় বিকাশকারীরা যত্নবান হন যে তারা খুব স্থিতিশীল ইন্টারফেস সরবরাহ করে তা নিশ্চিত করার জন্য (যেমন রেপোজিটরি স্টেট, স্টিডিন, কমান্ড লাইন অপশন, আর্গুমেন্ট ইত্যাদির একটি সংমিশ্রণ) গিটের সমস্ত সংস্করণে একই আউটপুট তৈরি করবে যেখানে কমান্ড / বিকল্প বিদ্যমান)। প্লাম্বিং কমান্ডগুলিতে নতুন আউটপুট প্রকরণগুলি নতুন বিকল্পগুলির মাধ্যমে প্রবর্তন করা যেতে পারে, তবে এটি পুরানো সংস্করণগুলির বিরুদ্ধে ইতিমধ্যে লেখা প্রোগ্রামগুলির জন্য কোনও সমস্যা প্রবর্তন করতে পারে না (যেগুলি বিদ্যমান ছিল না সেহেতু তারা নতুন বিকল্পগুলি ব্যবহার করবে না (বা কমপক্ষে ছিল স্ক্রিপ্টটি লেখার সময় ব্যবহার করা হয়নি)।
দুর্ভাগ্যক্রমে 'প্রতিদিনের' গিট কমান্ডগুলি হ'ল 'চীনামাটির বাসন' কমান্ড, সুতরাং বেশিরভাগ গিট ব্যবহারকারী নদীর গভীরতানির্ণয় আদেশের সাথে পরিচিত নাও হতে পারেন। চীনামাটির বাসন এবং নদীর গভীরতানির্ণয় কমান্ডের মধ্যে পার্থক্যটি মূল গিট ম্যানপেজে তৈরি করা হয় ( উচ্চ-স্তরের কমান্ড (চীনামাটির বাসন) এবং নিম্ন-স্তরের কমান্ড (নদীর গভীরতানির্ণয়) শীর্ষক সাব-বিভাগগুলি দেখুন ।
নিরবিচ্ছিন্ন পরিবর্তনগুলি সম্পর্কে সন্ধানের জন্য আপনার সম্ভবত git diff-index
অন্য কিছু গাছের (যেমন উদ্যানের) তুলনায় সূচক (এবং কার্যক্ষম গাছের ট্র্যাক বিট HEAD
) git diff-files
তুলনা করতে হবে, সম্ভবত git ls-files
( সূচীর বিপরীতে কর্মক্ষম গাছের তুলনা করুন), এবং সম্ভবত (তালিকার ফাইলগুলি; উদাহরণস্বরূপ তালিকুক্ত না হওয়া) , অচিভুক্ত ফাইলগুলি)।
(নোট করুন যে নীচের কমান্ডগুলিতে HEAD --
পরিবর্তে ব্যবহৃত হবে HEAD
কারণ অন্যথায় কোনও ফাইলের নাম থাকলে কমান্ডটি ব্যর্থ হয় HEAD
।)
কোনও সংগ্রহস্থল পরিবর্তনের মঞ্চস্থ হয়েছে কিনা তা পরীক্ষা করতে (এখনও প্রতিশ্রুতিবদ্ধ নয়) এটি ব্যবহার করুন:
git diff-index --quiet --cached HEAD --
- যদি এটির সাথে প্রস্থান হয়
0
তবে কোনও পার্থক্য ছিল না ( 1
অর্থাত্ পার্থক্য ছিল)।
কোনও কার্যনির্বাহী গাছের মঞ্চস্থ পরিবর্তন হতে পারে কিনা তা পরীক্ষা করতে:
git diff-files --quiet
- প্রস্থান কোডটি
git diff-index
( 0
== কোনও পার্থক্য নয়; 1
== পার্থক্য) এর সমান ।
কার্যনির্বাহী গাছের সূচক এবং ট্র্যাক করা ফাইলগুলির সংমিশ্রণের সাথে সম্পর্কিত পরিবর্তন রয়েছে কিনা তা পরীক্ষা করতে HEAD
:
git diff-index --quiet HEAD --
- এটি আগের দুজনের সংমিশ্রণের মতো। একটি প্রধান পার্থক্য হ'ল এটি এখনও কোনও "কোনও পার্থক্য নয়" প্রতিবেদন করবে যদি আপনার যদি পর্যায়ক্রমে পরিবর্তন হয় যে আপনি কার্যনির্বাহী গাছের মধ্যে "পূর্বাবস্থায় ফিরে এসেছেন" (যে বিষয়বস্তুগুলিতে ফিরে এসেছেন
HEAD
)। এই একই পরিস্থিতিতে, দুটি পৃথক কমান্ড উভয়ই "পার্থক্য উপস্থিত রয়েছে" এর রিপোর্ট ফিরিয়ে দেবে।
আপনি অচিহ্নযুক্ত ফাইলগুলি উল্লেখ করেছেন। আপনার অর্থ হতে পারে "আনট্র্যাকড এবং অযৌক্তিকর", বা আপনার অর্থ কেবল সরল "অচিহ্নযুক্ত" (উপেক্ষা করা ফাইলগুলি সহ) হতে পারে। যে কোনও উপায়ে, git ls-files
কাজের জন্য হাতিয়ার:
“চিহ্নবিহীন” জন্য (উপস্থিত থাকলে উপেক্ষা করা ফাইল অন্তর্ভুক্ত থাকবে):
git ls-files --others
"চিহ্নবিহীন এবং অযৌক্তিকর" জন্য:
git ls-files --exclude-standard --others
আমার প্রথম চিন্তাটি কেবল এই কমান্ডগুলির আউটপুট রয়েছে কিনা তা যাচাই করা হবে:
test -z "$(git ls-files --others)"
- যদি এটির সাথে প্রস্থান হয়
0
তবে সেখানে কোনও আন-ল্যাক করা ফাইল নেই। যদি এটির সাথে প্রস্থান হয় 1
তবে তালিবদ্ধ ফাইল রয়েছে।
একটি ছোট্ট সম্ভাবনা রয়েছে যে এটি অস্বাভাবিক প্রস্থানগুলি থেকে git ls-files
"কোনও চিহ্নবিহীন ফাইল নয়" রিপোর্টগুলিতে অনুবাদ করবে (উভয়ই উপরের কমান্ডের শূন্য-বহির্গমন হতে পারে)। কিছুটা বেশি শক্তিশালী সংস্করণটি এর মতো দেখতে পারে:
u="$(git ls-files --others)" && test -z "$u"
- ধারণাটি আগের কমান্ডের সমান, তবে এটি অপ্রত্যাশিত ত্রুটিগুলি
git ls-files
প্রচার করতে দেয়। এক্ষেত্রে শূন্য-বহির্গমন প্রস্থানটির অর্থ হতে পারে "সেখানে তালিকৃত ফাইল রয়েছে" বা এর অর্থ একটি ত্রুটি ঘটেছে। আপনি যদি এর পরিবর্তে "কোনও চিহ্নবিহীন ফাইলগুলি" ফলাফলের সাথে মিলিত "ত্রুটি" ফলাফলগুলি চান তবে ব্যবহার করুন test -n "$u"
(যেখানে 0
"কিছু চিহ্নবিহীন ফাইলগুলি" এর প্রস্থান করার অর্থ, এবং নন-শূন্যের অর্থ ত্রুটি বা "কোনও চিহ্নবিহীন ফাইল নয়") ব্যবহার করুন।
অন্য ধারণাটি হ'ল --error-unmatch
যখন কোনও তালিকার চিহ্নবিহীন ফাইল নেই তখন একটি শূন্য-বহির্গমন প্রস্থান করতে ব্যবহার করা। এটি "কোনও ত্রুটিযুক্ত ফাইল নেই" (প্রস্থান 1
) "একটি ত্রুটি ঘটেছে" (শূন্য- বহিরাগত , তবে সম্ভবত 128
) থেকে বেরিয়ে আসার ঝুঁকিও চালায় । তবে 0
বনাম বনাম 1
বনাম শূন্য-বহির্গমন কোডগুলি পরীক্ষা করা সম্ভবত যথেষ্ট শক্তিশালী:
git ls-files --others --error-unmatch . >/dev/null 2>&1; ec=$?
if test "$ec" = 0; then
echo some untracked files
elif test "$ec" = 1; then
echo no untracked files
else
echo error from ls-files
fi
উপরের যে কোনও git ls-files
উদাহরণ গ্রহণ করতে পারে --exclude-standard
যদি আপনি কেবল অচিহ্নযুক্ত এবং অচিভুক্ত ফাইলই বিবেচনা করতে চান।