निरंतर 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
, यह पूछने पर दबाता है कि क्या वह इस पैच को छोड़ना चाहता है और अंत q
में इंटरएक्टिव से बाहर निकलने के लिए दबाता है reset
।
इंटरैक्टिव उलट पैच प्रक्रिया यहाँ प्रलेखित है: https://git-scm.com/docs/git-add#git-add-patch
नोट: उपरोक्त स्क्रिप्ट यह मानते हुए कि चर interactive.singleKey
है false
। आप के लिए तुम्हारा कॉन्फ़िगर किया गया हैं true
, किसी भी हटाने $'\n'
से echo
सही चेतावनी के बाद आदेश।