অবিরত https://stackoverflow.com/a/20574486/4935114 , @ মাইকে এমন একটি pre-commit
হুক তৈরি করার প্রস্তাব দেওয়া হয়েছে যা স্টেইন্ড করাgrep
ফাইলগুলিতে যে লাইনের জন্য কেউ এড়িয়ে যেতে চায়। এই লাইনগুলি মঞ্চস্থ করা হয়েছে কিনা তা হুক চেক করে। যদি তা হয় তবে এটি echo
সতর্কবার্তা এবং এটি exit
কোড সহ 1
তাই প্রতিশ্রুতিবদ্ধ প্রক্রিয়াটি চলবে না।
@ মাইক এর উত্তরে অনুপ্রাণিত হয়ে আমি নিজেকে তার হুকের সম্ভবত একটি উন্নত সংস্করণ ব্যবহার করেছি যা স্বয়ংক্রিয়ভাবে নির্দিষ্ট পতাকাটি reset
( -p
পতাকা সহ) ব্যবহার করবে যা আমরা উপেক্ষা করতে চাই।
আমি নিশ্চিত নই যে এই হুক এমন পরিস্থিতির জন্য কাজ করবে যেখানে আপনার এই লাইন সহ অনেকগুলি ফাইল উপেক্ষা করা হবে, তবে এই pre-commit
হুক একটি নির্দিষ্ট ফাইলে এই লাইনের পরিবর্তিত সন্ধান করবে buildVars.java
। হুক স্ক্রিপ্টটি আমার মেশিনে এটি পরীক্ষা করার সময় দেখে মনে হয়েছিল।
#!/bin/sh
# this hook looks for lines with the text `var isPhoneGap = false;` in the file `buildVars.java` and it resets these lines to the previous state before staged with `reset -p`
if [[ $(git diff --no-ext-diff --cached buildVars.java | grep --count -e "var\ isPhoneGap[\ ]*=[\ ]*") -ne 0 ]]; then
cat <<EOW
WARNING: You are attempting to commit changes which are not supposed to be commited according to this \`pre-commit\` hook
This \`pre-commit\` hook will reset all the files containing this line to it's previous state in the last commit.
EOW
echo /$'\n'isPhoneGap$'\n'y$'\n'q | git reset -p
# BONUS: Check if after reseting, there is no actual changes to be commited and if so, exit 1 so the commit process will abort.
if [[ $(git diff --no-ext-diff --cached | wc -l) -eq 0 ]]; then
echo there are no actual changes to be commited and besides the change to the variable \'isPhoneGap\' so I won\'t commit.
exit 1
fi
fi
ব্যাখ্যা
আমি যা করেছি তা একটি নিয়ন্ত্রণ ক্রম প্রতিধ্বনিত হয়েছিল যা isPhoneGap
একটি ইন্টারেক্টিভ reset
প্রক্রিয়া চলাকালীন রেজেক্সের জন্য অনুসন্ধান করে। কে কে এভাবে ছাপাখানা একটি ব্যবহারকারী এমুলেট /
জন্য অনুসন্ধান করতে isPhoneGap
, ছাপাখানা y
যখন জিজ্ঞাসা যদি সে এই প্যাচ বাতিল করতে চায় এবং পরিশেষে presses q
ইন্টারেক্টিভ থেকে প্রস্থান করার জন্য reset
।
ইন্টারেক্টিভ বিপরীত প্যাচ প্রক্রিয়াটি এখানে নথিভুক্ত করা হয়েছে: https://git-scm.com/docs/git-add#git-add-patch
উল্লেখ্য: উপরে স্ক্রিপ্ট অভিমানী যে পরিবর্তনশীল interactive.singleKey
হয় false
। আপনি যদি এটিতে কনফিগার করেছেন, সতর্কতার পরে ঠিক কমান্ড থেকে true
যেকোনটি সরান ।$'\n'
echo