Git में बाइनरी फ़ाइलों को अलग करने के लिए, मुझे लगता है कि मुझे एक difftool सेट करने की आवश्यकता है।
क्या कार्य करता है? आप मापदंडों को कैसे लगाते हैं?
Git में बाइनरी फ़ाइलों को अलग करने के लिए, मुझे लगता है कि मुझे एक difftool सेट करने की आवश्यकता है।
क्या कार्य करता है? आप मापदंडों को कैसे लगाते हैं?
जवाबों:
आप textconv
एक फ़ाइल नाम के लिए एक विन्यास विकल्प सेट कर सकते हैं । Gitattributes में "बाइनरी फ़ाइलों का प्रदर्शन पाठ भिन्नता " (5) देखें । आपको क्या उपयोग करना चाहिए यह फ़िलाटाइप पर निर्भर करता है।
उदाहरण 1 :
कहते हैं कि आप ज़िप फ़ाइलों की सामग्री को अलग करना चाहते हैं। उस स्थिति में आपको $ GIT_DIR / config फाइल या $ HOME / .ITconfig में निम्नलिखित को डालना चाहिए।
[diff "zip"]
textconv = unzip -v
अगली बार जब आप रेपो में जिप फाइल पर एक अंतर पूछते हैं, तो यह unzip -v
दोनों वर्जन पर कॉल करेगा और परिणामी टेक्स्ट को अलग करेगा।
उदाहरण 2 :
पीडीएफ फाइलों के लिए आप उदाहरण के लिए उपयोग कर सकते हैं pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
उदाहरण 3 :
यदि किसी फ़िलाटाइप के लिए कोई विशिष्ट जानकारी नहीं है, तो आप उदाहरण के लिए hexdump
(FreeBSD और OSX, लिनक्स पर भी उपलब्ध है) का उपयोग कर सकते हैं:
[diff "bin"]
textconv = hexdump -v -C
रोलैंड स्मिथ का जवाब मददगार था लेकिन वर्तमान में अधूरा है (टिप्पणियों को देखें) - इसके दो हिस्से हैं।
आप अपनी रिपॉजिटरी की .git/config
फ़ाइल या अपनी व्यक्तिगत वैश्विक ~/.gitconfig
फ़ाइल में एक नई भिन्न कमांड को परिभाषित कर सकते हैं , उदाहरण के लिए हेक्स डिफरेंस कमांड का उपयोग करके hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
इसके बाद, आपको .gitattributes
यह बताने के लिए रिपॉजिटरी की फाइल का उपयोग करने की जरूरत है कि कौन सी फाइलें इस विशेष अंतर कमांड के साथ उपयोग की जानी चाहिए:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
.gitignore
फ़ाइल की तरह, फ़ाइल .gitattributes
को आपके रिपॉजिटरी में चेक किया जाना चाहिए।
मेरे मामले में मेरे पास कई अलग-अलग फ़ाइल एक्सटेंशन हैं जो मैं बाइनरी के रूप में व्यवहार करना चाहता हूं (जैसे कि विंडोज पर गिट का उपयोग करने पर किसी भी पंक्ति को समाप्त करने से बचें), और इसके माध्यम से कोई अंतर भी देखें hexdump
:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
एक अन्य उदाहरण के लिए https://github.com/resin-io/etcher/pull/1367 यह भी देखें कि छवि फ़ाइलों के साथ उपयोग के लिए एक हेक्सडंप अंतर कमांड को परिभाषित करना।
.gitattributes
विश्व स्तर पर भी ( [diff]
अपनी वैश्विक में प्रविष्टियों के साथ जाने के लिए) सेट कर सकते हैं .gitconfig
। यदि आप .gitattributes
रेपो को स्थानीय बनाते हैं , तो उपयोगकर्ता को अपनी स्थानीय .gitconfig
रेपो सेटिंग्स को संशोधित करना होगा क्योंकि सुरक्षा कारणों से उन्हें रिमोट पर नहीं धकेला जाएगा। किसी भी तरह से, प्रत्येक उपयोगकर्ता को इस व्यवहार को सक्षम करने के लिए किसी तरह से अपनी स्थानीय फ़ाइलों / कॉन्फ़िगरेशन को अपडेट करना होगा। में .gitconfig
के तहत [core]
जोड़ने attributesfile = c:/users/<username>/.gitattributes
या जहाँ भी आप अगर आप इसे वैश्विक (forwardslashes ध्यान दें, खिड़कियां में भी) यह संग्रहीत करना चाहते हैं।
उपरोक्त व्यापक तरीके हैं ऐसा करने के लिए .. हालाँकि, अगर आपको इसे कुछ फ़ाइलों के लिए करने की आवश्यकता है, तो निम्न विधि वह है जो मैं उपयोग करता हूं:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
यहाँ मैं उपयोग कर रहा हूँ vimdiff
लेकिन आप किसी अन्य उपकरण का उपयोग कर सकते हैं। यदि आपको इसे बार-बार करने की आवश्यकता है, तो उपरोक्त को एक छोटी स्क्रिप्ट में भी जोड़ा जा सकता है।