2014-12-15 3 views
17

मेरी प्रोजेक्ट की शैली पिछली सफेद जगह को ट्रिम करने के लिए कहती है, लेकिन इससे बहुत गन्दा हो जाता है। वास्तविक फिक्स करने से पहले मैं उन्हें एक प्रतिबद्धता में समेकित करना चाहता हूं।गिट-ऐड केवल व्हाइटस्पेस परिवर्तन?

यह बारीकी से Add only non-whitespace changes से संबंधित है, लेकिन यह ठीक विपरीत पूछ रहा है:

वहाँ मचान क्षेत्र के लिए केवल रिक्त स्थान परिवर्तन जोड़ने के लिए एक रास्ता है?

उत्तर

23

आप नीचे दिए गए "चाल" की कोशिश कर सकते हैं:

git add -A 
git diff --cached -w | git apply --cached -R 

यह मूलतः सूचकांक के लिए सब कुछ कहते हैं, तो सभी परिवर्तन जो खाली स्थान के अधिक से अधिक को प्रभावित unstages।

+1

संबंधित, गिट उपनाम बनाने के लिए: http://stackoverflow.com/a/19525426/1443496। ऐसा नहीं लगता है कि उपनाम में पाइपिंग की अनुमति देने के लिए कोई चालाक चाल है, इसलिए आपको एक खोल में स्थगित करना होगा। –

+0

@SeanAllred धन्यवाद मैं –

+0

प्रश्न को गलत तरीके से पढ़ता हूं, जब फ़ाइल पूर्व-सामान्यीकरण में पूंछ पर दो नई रेखाएं होती हैं (जहां सामान्यीकरण इसे एक से ट्रिम करता है)। –

2

यहाँ एक बैश समाधान है कि मुझे

for fname in $(git diff --name-only --diff-filter=ACMR --full-index HEAD) 
do 
    diff=$(git diff -w --ignore-blank-lines --exit-code $fname) 
    if [ $? -eq 0 ]; then 
     echo "only whitespace diff on $fname ! adding to git..." 
     git add $fname 
    else 
     echo "diff on $fname!" 
    fi 
done 
+0

एसओ में आपका स्वागत है! :) –

1

के लिए काम किया मैं गठबंधन और बड़े डिफ के साथ एकाधिक फ़ाइलों के खाली स्थान के लिए प्रतिबद्ध करने टोबियास 'और nneonneo के जवाब संशोधित करने के लिए था। अपने भंडार की जड़ से इसे चलाने के लिए सुनिश्चित करें।

git add -A 
for FILE_NAME in $(git --no-pager diff --name-only --diff-filter=ACMR --full-index HEAD) 
do 
    git --no-pager diff --cached -w $FILE_NAME | git apply --cached -R 
done 

git --no-pager डिफ़ॉल्ट स्क्रॉल कि Git सामग्री की बड़ी मात्रा में प्रदर्शित करने के लिए उपयोग करता है रोकता है। --name-only लूप कमांड को एकाधिक फ़ाइलों पर काम करने की अनुमति देता है।

संबंधित मुद्दे