आप पैच के रूप में अपने परिवर्तनों का इलाज करने में गिट को धोखा देकर, आपके लिए व्हाट्सएप को ठीक करने में चाल कर सकते हैं। "पूर्व-प्रतिबद्ध हुक" समाधानों के विपरीत, ये समाधान गिट्स में व्हाट्सएप-फिक्सिंग कमांड जोड़ते हैं।
हां, ये हैक हैं।
मजबूत समाधान
निम्नलिखित गिट उपनाम मेरे~/.gitconfig
से लिया गया है
।
"मजबूत" से मेरा मतलब है कि ये उपनाम त्रुटि के बिना चलते हैं, सही काम करते हैं, भले ही पेड़ या सूचकांक गंदा हो। हालाँकि, वे काम नहीं करते हैं अगर एक इंटरैक्टिव git rebase -i
पहले से ही प्रगति में है; यदि आप इस कोने के मामले की परवाह करते हैं, तो अतिरिक्त जांच के लिए मेरी~/.gitconfig
देखिए , जहां git add -e
अंत में वर्णित ट्रिक काम करना चाहिए।
यदि आप उन्हें सीधे शेल में चलाना चाहते हैं, तो बिना गीट उर्फ बनाए बिना, दोहरे उद्धरणों के बीच सब कुछ कॉपी और पेस्ट करें (मान लें कि आपका शेल बैश जैसा है)।
सूचकांक को ठीक करें लेकिन पेड़ को नहीं
निम्न fixws
गिट उर्फ सूचकांक में सभी व्हाट्सएप त्रुटियों को ठीक करता है, यदि कोई हो, लेकिन पेड़ को नहीं छूता है:
# Logic:
#
# The 'git stash save' fails if the tree is clean (instead of
# creating an empty stash :P). So, we only 'stash' and 'pop' if
# the tree is dirty.
#
# The 'git rebase --whitespace=fix HEAD~' throws away the commit
# if it's empty, and adding '--keep-empty' prevents the whitespace
# from being fixed. So, we first check that the index is dirty.
#
# Also:
# - '(! git diff-index --quiet --cached HEAD)' is true (zero) if
# the index is dirty
# - '(! git diff-files --quiet .)' is true if the tree is dirty
#
# The 'rebase --whitespace=fix' trick is from here:
# https://stackoverflow.com/a/19156679/470844
fixws = !"\
if (! git diff-files --quiet .) && \
(! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git stash save FIXWS_SAVE_TREE && \
git rebase --whitespace=fix HEAD~ && \
git stash pop && \
git reset --soft HEAD~ ; \
elif (! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git rebase --whitespace=fix HEAD~ && \
git reset --soft HEAD~ ; \
fi"
सूचकांक में व्हॉट्सएप की त्रुटियां git fixws
होने से पहले विचार करना है git commit
।
सूचकांक और पेड़ को ठीक करें
निम्न fixws-global-tree-and-index
गिट उर्फ सूचकांक और पेड़ में सभी व्हाट्सएप त्रुटियों को ठीक करता है, यदि कोई हो:
# The different cases are:
# - dirty tree and dirty index
# - dirty tree and clean index
# - clean tree and dirty index
#
# We have to consider separate cases because the 'git rebase
# --whitespace=fix' is not compatible with empty commits (adding
# '--keep-empty' makes Git not fix the whitespace :P).
fixws-global-tree-and-index = !"\
if (! git diff-files --quiet .) && \
(! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git add -u :/ && \
git commit -m FIXWS_SAVE_TREE && \
git rebase --whitespace=fix HEAD~2 && \
git reset HEAD~ && \
git reset --soft HEAD~ ; \
elif (! git diff-files --quiet .) ; then \
git add -u :/ && \
git commit -m FIXWS_SAVE_TREE && \
git rebase --whitespace=fix HEAD~ && \
git reset HEAD~ ; \
elif (! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git rebase --whitespace=fix HEAD~ && \
git reset --soft HEAD~ ; \
fi"
Unversioned फ़ाइलों में व्हॉट्सएप को ठीक करने के लिए भी करें
git add --intent-to-add <unversioned files> && git fixws-global-tree-and-index
सरल लेकिन मजबूत समाधान नहीं
इन संस्करणों को कॉपी और पेस्ट करना आसान है, लेकिन अगर उनकी साइड की शर्तों को पूरा नहीं किया जाता है तो वे सही काम नहीं करते हैं।
वर्तमान निर्देशिका में निहित उप-पेड़ को ठीक करें (लेकिन यदि यह खाली नहीं है तो सूचकांक रीसेट करता है)
का उपयोग git add -e
करने के लिए "संपादित करें" पहचान संपादक के साथ पैच :
:
(export GIT_EDITOR=: && git -c apply.whitespace=fix add -ue .) && git checkout . && git reset
सूचकांक को ठीक करें और संरक्षित करें (लेकिन विफल रहता है अगर पेड़ गंदा है या सूचकांक खाली है)
git commit -m TEMP && git rebase --whitespace=fix HEAD~ && git reset --soft HEAD~
पेड़ और इंडेक्स को ठीक करें (लेकिन खाली न होने पर इंडेक्स को रीसेट करता है)
git add -u :/ && git commit -m TEMP && git rebase --whitespace=fix HEAD~ && git reset HEAD~
export GIT_EDITOR=: && git -c apply.whitespace=fix add -ue .
चाल की व्याख्या
इससे पहले कि मैं इस उत्तरgit rebase --whitespace=fix
से चाल के बारे में जानूं मैं हर जगह अधिक जटिल चाल का उपयोग कर रहा था ।git add
यदि हमने इसे मैन्युअल रूप से किया है:
सेट apply.whitespace
करें fix
(आपको केवल एक बार ऐसा करना होगा):
git config apply.whitespace fix
यह गिट को पैच में व्हाट्सएप ठीक करने के लिए कहता है ।
अपने परिवर्तनों को एक पैच के रूप में मानने के लिए Git को मनाएं :
git add -up .
प्रत्येक फ़ाइल के सभी परिवर्तनों का चयन करने के लिए a+ मारो enter। आपको अपनी व्हाट्सएप त्रुटियों को ठीक करने के बारे में एक चेतावनी मिलेगी।
( git -c color.ui=auto diff
इस बिंदु पर पता चलता है कि आपके गैर-अनुक्रमित परिवर्तन बिल्कुल व्हाट्सएप त्रुटियां हैं)।
अपनी वर्किंग कॉपी से व्हॉट्सएप की त्रुटियों को दूर करें:
git checkout .
अपने परिवर्तन वापस लाएं (यदि आप उन्हें करने के लिए तैयार नहीं हैं):
git reset
GIT_EDITOR=:
साधनों का उपयोग करने के लिए :
संपादक के रूप में, और एक आदेश के रूप में
:
पहचान है।