मैं एक विंडोज उपयोगकर्ता नहीं हूं, इसलिए नमक के अनाज के साथ मेरा जवाब लें। Windows PowerShell Cookbook के अनुसार, पावरशेल git diff
के आउटपुट को पूर्व-प्रोसेस करता है, इसे लाइनों में विभाजित करता है। Out-File
सीएमडीलेट का दस्तावेज़ीकरण बताता है कि >
पैरामीटर के बिना | Out-File
जैसा ही है।
बाहर फ़ाइल cmdlet का उपयोग नहीं किया जा सकता यदि आप पारंपरिक उत्पादन पुनर्निर्देशन करने के लिए उपयोग किया जाता है कि आप क्या उम्मीद के परिणाम: हम भी PowerShell documentation में इस टिप्पणी को पाते हैं। अपने व्यवहार को समझने के लिए, आपको उस संदर्भ के बारे में अवगत होना चाहिए जिसमें आउट-फाइल cmdlet संचालित होता है।
डिफ़ॉल्ट रूप से, आउट-फ़ाइल cmdlet एक यूनिकोड फ़ाइल बनाता है।यह लंबे समय तक सबसे अच्छा डिफ़ॉल्ट है, लेकिन इसका मतलब यह है कि एएससीआईआई फाइलों की अपेक्षा करने वाले टूल्स डिफ़ॉल्ट आउटपुट प्रारूप के साथ सही तरीके से काम नहीं करेंगे। आप एन्कोडिंग पैरामीटर का उपयोग करके ASCII करने के लिए डिफ़ॉल्ट उत्पादन प्रारूप बदल सकते हैं:
[...]
बाहर फ़ाइल स्वरूपों सामग्री फ़ाइल कंसोल आउटपुट तरह देखने के लिए। इससे अधिकांश परिस्थितियों में कंसोल विंडो में आउटपुट को छोटा कर दिया जाता है। [...]
आउटपुट प्राप्त करने के लिए जो स्क्रीन चौड़ाई से मेल खाने के लिए लाइन रैप को मजबूर नहीं करता है, आप लाइन चौड़ाई निर्दिष्ट करने के लिए चौड़ाई पैरामीटर का उपयोग कर सकते हैं।
तो जाहिर है, यह गिट नहीं है जो चरित्र एन्कोडिंग चुनता है, लेकिन Out-File
। यह पता चलता है क) PowerShell पुनर्निर्देशन वास्तव में केवल पाठ के लिए इस्तेमाल किया जाना चाहिए कि और ख) कि
| Out-File -encoding ASCII -Width 2147483647 my.patch
एन्कोडिंग समस्याओं से बचने होगा। हालांकि, यह अभी भी विंडोज बनाम यूनिक्स लाइन-एंडिंग के साथ समस्या का समाधान नहीं करता है। लाइन-एंडिंग के रूपांतरण के लिए सीएमडीलेट्स (PowerShell Community Extensions देखें) हैं।
हालांकि, यह सब रिकोडिंग पैच में मेरा विश्वास नहीं बढ़ाती है (जिसमें कोई एन्कोडिंग नहीं है, लेकिन केवल बाइट्स की एक स्ट्रिंग है)। उपरोक्त Cookbook में एक स्क्रिप्ट Invoke-BinaryProcess शामिल है, जिसका उपयोग बिना किसी आदेश के आउटपुट के आउटपुट को रीडायरेक्ट किया जा सकता है।
इस पूरे मुद्दे को दूर करने के लिए, git diff
के बजाय git format-patch
का उपयोग करने का विकल्प होगा। format-patch
सीधे एक फ़ाइल (और stdout नहीं) लिखता है, इसलिए इसका आउटपुट रिकोड नहीं किया जाता है। हालांकि, यह केवल मनमाने ढंग से भिन्नता से पैच बना सकता है। एक बढ़ती हुई
format-patch
एक प्रतिबद्ध रेंज (जैसे master^10..master^5
) लेता है या एक ही प्रतिबद्ध (जैसे एक्स, जिसका अर्थ है X..HEAD) और फार्म NNNN-SUBJECT.patch, जहां NNNN है की पैच फ़ाइलें बनाता है 4 अंकों की संख्या और विषय पैच के (उलझन) विषय है। एक आउटपुट निर्देशिका -o
के साथ निर्दिष्ट की जा सकती है।
यह विहित रास्ता आवेदन के लिए पैच बनाने के लिए इस सवाल का सीधा जवाब तथापि, नहीं है, न केवल मानव उपभोग नहीं 'Git diff', लेकिन' Git प्रारूप-patch' है - यह नहीं है के रूप में डिफ़ॉल्ट रूप से stdout आउटपुट, मुझे लगता है कि आप उलझन चरित्र एन्कोडिंग के साथ कोई समस्या नहीं होगी। –
@cebewee: धन्यवाद, और इस मामले में मैं इसका उपयोग कैसे करूँ? तो मुझे आउटपुट फ़ाइल के नाम को कैसे परिभाषित करना चाहिए? – Sk8erPeter
'गिट प्रारूप-पैच' को एक सिंगल प्रतिबद्ध एक्स (अर्थात् हेड..एक्स) या एक प्रतिबद्धता सीमा मिलती है और इनमें से प्रत्येक के लिए एनएनएनएन-सबजेक्ट नामक फाइलें उत्पन्न होती हैं।पैच, जहां एनएनएनएन एक बढ़ती संख्या है और SUBJECt प्रतिबद्धता के विषय का एक उलझन वाला संस्करण है। –