मेरे ग्राहक git diffबिना स्थापित किए हुए पैच कैसे बना सकते हैं ? मैंने patchकमांड का उपयोग करने की कोशिश की है लेकिन यह हमेशा फ़ाइल नाम को पैच करने के लिए कहता है।
patchपूरी तरह से इस प्रारूप का समर्थन नहीं करता है।
मेरे ग्राहक git diffबिना स्थापित किए हुए पैच कैसे बना सकते हैं ? मैंने patchकमांड का उपयोग करने की कोशिश की है लेकिन यह हमेशा फ़ाइल नाम को पैच करने के लिए कहता है।
patchपूरी तरह से इस प्रारूप का समर्थन नहीं करता है।
जवाबों:
git diff > patchfile
तथा
patch -p1 < patchfile
काम लेकिन जितने लोगों ने टिप्पणियों और अन्य उत्तरों पर ध्यान दिया, पैच समझ में नहीं आता, हटाता है और नाम बदल देता है। कोई विकल्प नहीं है, लेकिन git apply patchfileअगर आपको हैंडल फ़ाइल को जोड़ने, हटाने और नाम बदलने की आवश्यकता है।
EDIT दिसंबर 2015
patchकमांड के नवीनतम संस्करण (2.7, सितंबर 2012 में जारी किए गए) "नाम-स्वरूप" प्रारूप की अधिकांश विशेषताओं का समर्थन करते हैं, जिसमें नाम और प्रतियाँ, अनुमति परिवर्तन और सिम्लिंक भिन्न होते हैं (लेकिन अभी तक बाइनरी भिन्न नहीं होते हैं) ( रिलीज़ की घोषणा )।
इसलिए बशर्ते वर्तमान / नवीनतम संस्करण का patchउपयोग gitकिया जाए, ताकि पैच के रूप में इसका उपयोग लागू करने में सक्षम होने की आवश्यकता न हो।
git diff > patchfile, लेकिनpatch -p1 < patchfile
relativeविकल्प का उपयोग कर सकते हैं जैसे:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfilegit स्थापित करने की आवश्यकता नहीं है। पहला कमांड डिफॉल्ट जेनरेट करने के लिए कमांड को प्रदर्शित करता है, इसे लागू नहीं करने के लिए।
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfileयाgit diff from_branch to_branch > patchfile; ...
उपयोग
git apply patchfile
अगर संभव हो तो।
patch -p1 < patchfile
संभावित दुष्परिणाम है।
git applyयदि वे git diffप्रारूप में वर्णित हैं, तो फ़ाइल को जोड़ता है, हटाता है और नाम बदल देता है , जो patchऐसा नहीं करेगा। अंत में, git applyएक "सभी को लागू करें या सभी को निरस्त करें" मॉडल है जहां या तो सब कुछ लागू है या कुछ भी नहीं है, जबकि पैच आंशिक रूप से पैच फ़ाइलों को लागू कर सकता है, जिससे आपकी कार्यशील निर्देशिका एक अजीब स्थिति में रह सकती है।
git applyइसे करने का सबसे अच्छा तरीका है, लेकिन यह सवाल विशेष रूप से पूछता है कि बिना गिट के पैच को कैसे लगाया जाए ।
--dry-run --verboseयह निर्धारित करने के लिए उपयोगी हैं कि दुष्प्रभाव क्या होगा, यदि कोई हो। (पैच v2.5.8 का उपयोग करते हुए)
git apply patchfile -... एकमात्र समझदार उत्तर ..." - यह लगभग प्रशंसनीय है। जब भी ओपनएसएसएल के देवता मुझे परीक्षण के लिए एक पैच भेजते हैं, तो गिट इसे लागू करने में विफल रहता है। वह हर बार है। मैंने अभी तक देखा है कि बेवकूफ उपकरण एक पैच लागू करते हैं।
मैं उपयोग करता हूं
patch -p1 --merge < patchfile
इस तरह, संघर्ष हमेशा की तरह हल हो सकते हैं।