दिलचस्प पोस्ट
सेलेनियम वेब ड्राइवर और जावा तत्व बिंदु पर क्लिक करने योग्य नहीं है (36, 72)। अन्य तत्व को क्लिक प्राप्त होगा: कैसे क्रोम DevTools में जावास्क्रिप्ट इंजेक्षन स्वयं बॉट फ़्रेमवर्क को एम्बेडेड चैट कंट्रोल पेज के ServiceUrl मिलता है React.js – घटक विधियों तक पहुंच आईफोन एसडीके में नए फोंट को कैसे शामिल और इस्तेमाल किया जाए? एक फाइल में लाइनों को खोजने का फास्ट रास्ता जो दूसरे में नहीं है? क्या "इनलाइन" "स्थिर" या "बाह्य" के बिना कभी भी C99 में उपयोगी है? ANTLR4 के साथ एएसटी कैसे बनाएं? अजगर शब्दकोश को डुप्लिकेट सूची बैश स्क्रिप्ट में पिंग का उपयोग करके होस्ट की उपलब्धता की जांच करना एकाधिक फ़ाइलों के माध्यम से बड़ी परियोजनाओं के लिए सिनात्रा का उपयोग करना CSS त्रिकोण कैसे काम करते हैं? मैं अजगर कार्यक्रमों को कैसे वितरित कर सकता हूं? PHP के साथ JSON को पार्स करना एएसपी.नेट एमवीसी सीएमएस के लिए डेटाबेस से गतिशील रूट

जीआईटी को स्वचालित बनाने से पहले सफेद स्थान को पीछे छोड़ दें

मैं अपनी टीम के साथ जीआईटी का उपयोग कर रहा हूं और मेरे अलग-अलग, लॉग, मर्ज, आदि से सफेद स्थान परिवर्तन को दूर करना चाहता हूं। मैं यह मान रहा हूं कि ऐसा करने का सबसे आसान तरीका git के लिए स्वचालित स्थान का पिछला स्थान (और अन्य व्हाट्सपेस त्रुटियों ) से सभी कमिट के रूप में वे लागू कर रहे हैं

मैंने ~/.gitconfig फ़ाइल में निम्नलिखित को जोड़ने का प्रयास किया है लेकिन जब मैं प्रतिबद्ध हूं, तो यह कुछ भी नहीं करता है शायद यह कुछ अलग के लिए डिज़ाइन किया गया है समाधान क्या है?

 [core] whitespace = trailing-space,space-before-tab [apply] whitespace = fix 

मैं रूबी का उपयोग कर रहा हूं अगर किसी के पास रूबी विशिष्ट विचार हैं। करने से पहले स्वचालित कोड स्वरूपण अगले कदम होगा, लेकिन यह एक कठिन समस्या है और वास्तव में एक बड़ी समस्या पैदा नहीं कर रहा है

वेब के समाधान से एकत्रित समाधान "जीआईटी को स्वचालित बनाने से पहले सफेद स्थान को पीछे छोड़ दें"

उन सेटिंग्स ( core.whitespace और apply.whitespace होते हैं। apply.whitespace ) पीछे की ओर सफेद स्थान को निकालने के लिए नहीं हैं, लेकिन इसके लिए:

  • core.whitespace : उन्हें पता लगाएं, और त्रुटियां बढ़ाएं
  • apply.whitespace : और उन्हें पट्टी, लेकिन केवल पैच के दौरान, "स्वचालित रूप से हमेशा"

मेरा मानना ​​है कि git hook pre-commit इसके लिए एक बेहतर काम करेगा (पिछला श्वेत स्थान को हटाने सहित)


ध्यान दें कि किसी भी समय आप pre-commit हुक को चलाने के लिए नहीं चुन सकते हैं:

  • अस्थायी रूप से: git commit --no-verify .
  • स्थायी रूप से: cd .git/hooks/ ; chmod -x pre-commit cd .git/hooks/ ; chmod -x pre-commit

चेतावनी: डिफ़ॉल्ट रूप से, एक pre-commit स्क्रिप्ट (जैसे कि यह एक ), "पिछली अनुगामी" सुविधा नहीं है, बल्कि एक "चेतावनी" सुविधा जैसे:

 if (/\s$/) { bad_line("trailing whitespace", $_); } 

फिर भी आप बेहतर pre-commit हुक बना सकते हैं , खासकर जब आप यह मानते हैं कि:

स्टेजींग क्षेत्र में जोड़े गए कुछ बदलावों के साथ गिट में सिमट कर अभी भी एक "परमाणु" संशोधन हो सकता है जो काम की प्रति के रूप में कभी भी अस्तित्व में नहीं हो सकता है और काम नहीं कर सकता है


उदाहरण के लिए, बुजुर्ग दूसरे उत्तर में एक pre-commit हुक का प्रस्ताव करता है जो कि व्हाइटस्पेस का पता लगाता है और हटाता है।
चूंकि उस हुक को प्रत्येक फ़ाइल का फ़ाइल नाम मिलता है, मैं निश्चित प्रकार की फाइलों के लिए सावधान रहने की सलाह देता हूं: आप .md (मार्कडाउन) फाइलों में पीछे की ओर सफेद स्थान को नहीं निकालना चाहते हैं!

आप गिट को पैच के रूप में अपने बदलावों के इलाज के लिए गिट में चकराकर अपने लिए ग्रीन स्पेस फिक्स करने के लिए चाल कर सकते हैं। "पूर्व-प्रतिबद्ध हुक" समाधान के विपरीत, इन समाधानों को ग्रिट के लिए व्हाइटस्पेस-फिक्सिंग कमांड जोड़ते हैं।

हां, ये हैंक्स हैं


मजबूत समाधान

निम्नलिखित ~/.gitconfig मेरे ~/.gitconfig से ली गई हैं ~/.gitconfig

"मजबूत" से मेरा मतलब है कि ये उपनाम बिना किसी त्रुटि के चलते हैं, सही काम कर रहे हैं, चाहे पेड़ या सूचक गंदा हो। हालांकि, अगर कोई इंटरेक्टिव git rebase -i पहले से प्रगति में है, तो वे काम नहीं करते; यदि आप इस कोने के मामले की परवाह करते हैं, तो अतिरिक्त चेक के लिए मेरी ~/.gitconfig देखें, जहां अंत में वर्णित git add -e चाल को काम करना चाहिए।

यदि आप उन्हें गोले में सीधे चलाते हैं, तो एक गिट उपनाम बनाने के बिना, बस सब कुछ डबल कोट्स (अपने खोल संभालना है जैसे बाश) के बीच पेस्ट करें।

सूचकांक को ठीक करें लेकिन वृक्ष का नहीं

निम्नलिखित fixws गिट ऊर्फ इंडेक्स में सभी 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 fixws को चलाने के git commit यदि आपके पास सूचकांक में सफेद स्थान की त्रुटियां हैं git fixws

सूचकांक और पेड़ को ठीक करें

निम्नलिखित fixws-global-tree-and-index गिट ऊर्फ 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" 

अनावश्यक फाइलों में सफेद स्थान को ठीक करने के लिए, करें

 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 . की व्याख्या export GIT_EDITOR=: && git -c apply.whitespace=fix add -ue . छल

इससे पहले कि मैं git rebase --whitespace=fix बारे में सीखा git rebase --whitespace=fix इस जवाब से चाल git rebase --whitespace=fix करें मैं अधिक जटिल git add का उपयोग कर रहा था हर जगह चाल git add

अगर हम इसे मैन्युअल रूप से करते हैं:

  1. apply.whitespace करने के लिए apply.whitespace करें। apply.whitespace करने के लिए apply.whitespace (आपको केवल एक बार करना होगा):

     git config apply.whitespace fix 

    यह गिट को पैच में श्वेतस्थान को ठीक करने के लिए कहता है।

  2. एक पैच के रूप में अपने परिवर्तनों का इलाज करने के लिए Git को विनियमित करें:

     git add -up . 

    प्रत्येक फ़ाइल के लिए सभी परिवर्तनों को चुनने के लिए a + दर्ज करें को दबाएं। आपको गीट के बारे में एक चेतावनी मिलेगी जो आपके व्हाइसस्पेस त्रुटियों को ठीक कर रही है।
    ( git -c color.ui=auto diff इस बिंदु पर git -c color.ui=auto diff पता चलता है कि आपके गैर-अनुक्रमित परिवर्तन बिल्कुल सफेद स्थान की त्रुटियां हैं)।

  3. अपनी कार्यप्रणाली से सफेद स्थान की त्रुटियां निकालें:

     git checkout . 
  4. अपने परिवर्तन वापस लाएं (यदि आप उन्हें करने के लिए तैयार नहीं हैं):

     git reset 

GIT_EDITOR=: इसका अर्थ है : संपादक के रूप में, और एक आदेश के रूप में : पहचान है।

मुझे एक git पूर्व-प्रतिबद्ध हुक मिला जो पीछे की ओर सफेद स्थान निकालता है I

 #!/bin/sh if git-rev-parse --verify HEAD >/dev/null 2>&1 ; then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # Find files with trailing whitespace for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do # Fix them! sed -i 's/[[:space:]]*$//' "$FILE" git add "$FILE" done exit 

मैक ओएस (या, संभवतः, किसी भी बीएसडी) पर, कमांड पैरामीटर को थोड़ा अलग होना चाहिए। इसे इस्तेमाल करे:

 #!/bin/sh if git-rev-parse --verify HEAD >/dev/null 2>&1 ; then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # Find files with trailing whitespace for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -E 's/:[0-9]+:.*//' | uniq` ; do # Fix them! sed -i '' -E 's/[[:space:]]*$//' "$FILE" git add "$FILE" done 

इस फ़ाइल को .git/hooks/pre-commit रूप में सहेजें – या जो वहां पहले से मौजूद है उसे ढूंढें, और इसके अंदर नीचे कहीं भी पेस्ट करें। और याद रखें कि chmod a+x यह भी है।

या वैश्विक उपयोग के लिए ( जीआईटी कमिट हुक – वैश्विक सेटिंग्स के माध्यम से) आप इसे $GIT_PREFIX/git-core/templates/hooks में डाल सकते $GIT_PREFIX/git-core/templates/hooks (जहां GIT_PREFIX / usr / / usr / local / / usr / share / / opt / local / साझा करें) और अपने वर्तमान रेपो के अंदर git init चलाएं।

git help init अनुसार:

मौजूदा रिपॉजिटरी में जीआईटी इनिट चलाना सुरक्षित है यह उन चीजों को अधिलेखित नहीं करेगा जो पहले से मौजूद हैं जीआईटी init rerunning के लिए प्राथमिक कारण नए जोड़े गए टेम्पलेट्स लेने के लिए है

मैं यह काम अपने पसंदीदा संपादक को छोड़ना चाहता हूं।

सहेजते समय पीछे के स्थान को हटाने के लिए बस एक कमांड सेट करें

मैंने इस पूर्व-प्रतिबद्ध हुक को लिखा था, जो केवल उन पंक्तियों से पिछड़े सफेद स्थान को हटाता है जिन्हें आपने बदल दिया है / जोड़ा है, क्योंकि पिछले सुझाव अपठनीय बनाने के लिए करते हैं यदि लक्ष्य फ़ाइलों में बहुत अधिक सफेद-स्थान पीछे चल रहा है

 #!/bin/sh if git rev-parse --verify HEAD >/dev/null 2>&1 ; then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi IFS=' ' files=$(git diff-index --check --cached $against -- | sed '/^[+-]/d' | perl -pe 's/:[0-9]+:.*//' | uniq) for file in $files ; do diff=$(git diff --cached $file) if test "$(git config diff.noprefix)" = "true"; then prefix=0 else prefix=1 fi echo "$diff" | patch -R -p$prefix diff=$(echo "$diff" | perl -pe 's/[ \t]+$// if m{^\+}') out=$(echo "$diff" | patch -p$prefix -f -s -t -o -) if [ $? -eq 0 ]; then echo "$diff" | patch -p$prefix -f -t -s fi git add $file done 

यहां एक उबुन्टू + मैक ओएस एक्स संगत संस्करण है:

 #!/bin/sh # # A git hook script to find and fix trailing whitespace # in your commits. Bypass it with the --no-verify option # to git-commit # if git-rev-parse --verify HEAD >/dev/null 2>&1 ; then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # Find files with trailing whitespace for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | (sed -r 's/:[0-9]+:.*//' > /dev/null 2>&1 || sed -E 's/:[0-9]+:.*//') | uniq` ; do # Fix them! (sed -i 's/[[:space:]]*$//' "$FILE" > /dev/null 2>&1 || sed -i '' -E 's/[[:space:]]*$//' "$FILE") git add "$FILE" done # Now we can commit exit 

मज़े करो

कृपया मेरे पूर्व-प्रतिबद्ध हुकों को आज़माएं, यह स्वत: पिछड़े-भिन्न स्थान का पता लगा सकता है और इसे हटा सकता है । धन्यवाद!

यह GitBash(windows), Mac OS X and Linux तहत काम कर सकता है!


स्नैपशॉट:

 $ git commit -am "test" auto remove trailing whitespace in foobar/main.m! auto remove trailing whitespace in foobar/AppDelegate.m! [master 80c11fe] test 1 file changed, 2 insertions(+), 2 deletions(-) 

Git विशेषताओं का उपयोग करना, और git config के साथ सेटअप करना

ठीक है, यह इस समस्या को हल करने पर एक नई चीज है … मेरा दृष्टिकोण किसी भी हुक का उपयोग नहीं करना है, बल्कि फ़िल्टर और जीआईटी विशेषताओं का उपयोग करना है यह आपको क्या करने की अनुमति देता है, प्रत्येक मशीन पर आप जो विकसित होते हैं, उनको सेट करने से पहले फ़ाइलों के अंत में अतिरिक्त पीछे वाले सफेद स्थान और अतिरिक्त रिक्त पंक्तियों को छीनने वाले फिल्टर का एक सेट है। फिर एक .gitattributes फ़ाइल सेट करते हैं जो कहती है कि किस प्रकार की फ़ाइलों को फ़िल्टर लागू किया जाना चाहिए फिल्टर के दो चरण होते हैं, जो साफ होता है जब सूचकांक में फ़ाइलें जोड़ते हैं, और धब्बा जो कार्य निर्देशिका में जोड़ते हैं तब लागू होता है।

एक वैश्विक विशेषताओं की फ़ाइल देखने के लिए अपने git को बताएँ

सबसे पहले, एक वैश्विक विशेषताओं का उपयोग करने के लिए अपनी वैश्विक कॉन्फ़िग को बताएं:

 git config --global core.attributesfile ~/.gitattributes_global 

वैश्विक फ़िल्टर बनाएं

अब, फ़िल्टर बनाएं:

 git config --global filter.fix-eol-eof.clean fixup-eol-eof %f git config --global filter.fix-eol-eof.smudge cat git config --global filter.fix-eol-eof.required true 

Sed स्क्रिप्टिंग जादू जोड़ें

अंत में, fixup-eol-eof स्क्रिप्ट को कहीं भी अपने पथ पर रखें और इसे निष्पादन योग्य बनाएं। स्क्रिप्ट फ़्लाई संपादन (कुछ पंक्तियों के अंत में रिक्त स्थान और रिक्त स्थान को हटा दें, और फ़ाइल के अंत में बाहरी रिक्त पंक्तियां) पर कुछ करने के लिए sed का उपयोग करती है।

फिक्सअप- eol-eof इस तरह दिखना चाहिए:

 #!/bin/bash sed -e 's/[ ]*$//' -e :a -e '/^\n*$/{$d;N;ba' -e '}' $1 

इस का मेरा सारांश

जीआईटी को बताएं कि आपके नए बनाए गए फ़िल्टर को लागू करने के लिए कौन से फ़ाइल प्रकार हैं

अन्त में, अपने पसंदीदा संपादक में ~ / .gitattributes_global बनाएँ या खोलें, जैसे लाइनें जोड़ें:

 pattern attr1 [attr2 [attr3 […]]] 

इसलिए यदि हम श्वेत स्थान की समस्या को ठीक करना चाहते हैं, तो हमारे सभी सी स्रोत फ़ाइलों के लिए हम एक ऐसा रेखा जोड़ देंगे जो इस तरह दिखता है:

 *.c filter=fix-eol-eof 

फ़िल्टर की चर्चा

फ़िल्टर के दो चरण होते हैं, जो साफ चरण होता है, जब चीजें सूचकांक में जोड़ दी जाती हैं या चेक की जाती हैं, और धब्बा चरण जब git आपकी कार्यशील निर्देशिका में सामान डालता है। यहां, हमारे धब्बा बस cat कमांड के माध्यम से सामग्री को चला रहे हैं, जो संभवत: एक अनुक्रमित नयालाइन वर्ण जोड़ने के अपवाद के साथ, यदि फाइल के अंत में एक नहीं है, तो उन्हें अपरिवर्तित छोड़ देना चाहिए। साफ कमांड व्हाटस्पेस फ़िल्टरिंग है जिसे मैं http://sed.sourceforge.net/sed1line.txt पर नोट्स से एक साथ खींचना चाहता हूं। ऐसा लगता है कि इसे एक खोल स्क्रिप्ट में रखा जाना चाहिए, मैं सीडी कमांड को इंजेक्ट करने के लिए समझ नहीं सका, जिसमें फ़ाइल के अंत में बाहरी अतिरिक्त लाइनों के स्वच्छता सहित जीआईटी-कॉन्फ़िग फाइल में सीधे शामिल होता है। (आप अलग-अलग खाली स्क्रिप्ट की आवश्यकता के बिना, पीछे के खाली filter.fix-eol-eof छुटकारा पा सकते हैं, सिर्फ filter.fix-eol-eof की तरह filter.fix-eol-eof सेट करें जैसे कि sed 's/[ \t]*$//' %f जहां टैब दबाकर \t एक वास्तविक टैब है।)

आवश्यकता = सच्चे एक त्रुटि उत्पन्न होती है अगर कुछ गलत हो जाती है, आपको परेशानी से बाहर रखने के लिए।

कृपया मुझे माफ कर दो अगर जीआईटी से संबंधित मेरी भाषा खराब है मुझे लगता है कि मुझे अवधारणाओं का काफी अच्छा समझ है, लेकिन अभी भी शब्दावली सीख रहा हूं।

आज इस बारे में सोच रहा था यह सब मैं एक जावा परियोजना के लिए कर रहा है:

 egrep -rl ' $' --include *.java * | xargs sed -i 's/\s\+$//g' 

फाइलों के लिए लूप $ IFS शेल चर का उपयोग करता है I दिए गए स्क्रिप्ट में, उन फाइलों के साथ फ़ाइल नाम जिनमें $ IFS-variable में है IF-loop में दो अलग-अलग फाइलों के रूप में देखा जाएगा। यह स्क्रिप्ट इसे ठीक करता है: मल्टीलाइन मोड मोडिफायर के रूप में दिए गए एसडी मैन्युअल मेरे यूबुंटू बॉक्स पर डिफ़ॉल्ट रूप से काम नहीं करता है, इसलिए मैंने एक अलग प्रवर्तन की मांग की और इसे एक पुनरावती लेबल के साथ मिला, अनिवार्य रूप से यह केवल पर प्रतिस्थापन शुरू करेगा फ़ाइल की अंतिम पंक्ति अगर मैंने इसे सही तरीके से समझा है

 #!/bin/sh # # A git hook script to find and fix trailing whitespace # in your commits. Bypass it with the --no-verify option # to git-commit # if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi SAVEIFS="$IFS" # only use new-line character as seperator, introduces EOL-bug? IFS=' ' # Find files with trailing whitespace for FILE in $( git diff-index --check --cached $against -- \ | sed '/^[+-]/d' \ | ( sed -r 's/:[0-9]+:.*//' || sed -E 's/:[0-9]+:.*//' ) \ | uniq \ ) do # replace whitespace-characters with nothing # if first execution of sed-command fails, try second one( MacOSx-version) ( sed -i ':a;N;$!ba;s/\n\+$//' "$FILE" > /dev/null 2>&1 \ || \ sed -i '' -E ':a;N;$!ba;s/\n\+$//' "$FILE" \ ) \ && \ # (re-)add files that have been altered to git commit-tree # when change was a [:space:]-character @EOL|EOF git-history becomes weird... git add "$FILE" done # restore $IFS IFS="$SAVEIFS" # exit script with the exit-code of git's check for whitespace-characters exec git diff-index --check --cached $against -- 

[1] sed-subsition पैटर्न: मैं कैसे एक नया लाइन (\ n) sed का उपयोग कर बदल सकता हूँ? ।

उत्कृष्ट पाठ उपयोगकर्ताओं के लिए

सेटिंग-उपयोगकर्ता कॉन्फ़िगरेशन में ठीक से निम्नलिखित सेट करें

"trim_trailing_white_space_on_save": true

थोड़ी देर देर हो चुकी है, लेकिन जब से यह किसी को बाहर मदद कर सकता है, यहाँ जाता है

वीआईएम में फाइल खोलें व्हाइटस्पेस के साथ टैब को बदलने के लिए, कमांड लाइन में निम्नलिखित टाइप करें

 :%s#\t# #gc 

अन्य पिछड़े सफेद स्थानों से छुटकारा पाने के लिए

 :%s#\s##gc 

यह बहुत ज्यादा मेरे लिए किया था यदि आपके पास बहुत सी फाइलें हैं जो संपादित करने के लिए हैं तो यह थकाऊ है लेकिन मुझे पहले से लगा हुआ हुकों की तुलना में आसान मिला और कई संपादकों के साथ काम करना

पोर्टेबल फ़ाइल में लाइन के अंत में पीछे की ओर सफेद स्थान को हटाने के लिए, ed उपयोग करें:

 test -s file && printf '%s\n' H ',g/[[:space:]]*$/s///' 'wq' | ed -s file 

यह स्वचालित रूप से एक कट करने से पहले व्हाटस्पेस को नहीं हटाता है, लेकिन यह प्रभाव के लिए बहुत आसान है। मैंने निम्नलिखित पर्ल स्क्रिप्ट को git-wsf (git whitespace fix) नामक एक फ़ाइल में डाल दिया है जो कि $ PATH में एक डायरेक्ट में है I

जीआईटी वाईएसएफ | श

और यह सभी रिक्त स्थान को केवल उन फ़ाइलों की तर्ज से निकालती है, जो कि एक अंतर के रूप में git रिपोर्ट करता है

 #! /bin/sh git diff --check | perl -x $0 exit #! /usr/bin/perl use strict; my %stuff; while (<>) { if (/trailing whitespace./) { my ($file,$line) = split(/:/); push @{$stuff{$file}},$line; } } while (my ($file, $line) = each %stuff) { printf "ex %s <<EOT\n", $file; for (@$line) { printf '%ds/ *$//'."\n", $_; } print "wq\nEOT\n"; } 

यह संभवत: आपकी समस्या को सीधे हल नहीं करेगा, लेकिन आप उन्हें अपने वास्तविक प्रोजेक्ट स्थान में git-config के माध्यम से सेट करना चाहते हैं, जो। /.git/config के विपरीत ~ / .gitconfig सभी परियोजना के सदस्यों के बीच सेटिंग्स को सुसंगत रखने के लिए अच्छा।

 git config core.whitespace "trailing-space,space-before-tab" git config apply.whitespace "trailing-space,space-before-tab"