2012-02-20 14 views
5

मैं एक Git भंडार है, और एक बहुत पुरानी पैच (2007 में किए गए) है कि मैं इस पर लागू करना चाहते हैं। भंडार की सामग्री को तब से काफी बदल गया है, और जब मैं पैच लागू करने का प्रयास है, यह संघर्ष की वजह से विफल रहता है।गिट में एक बहुत पुराना पैच कैसे लागू करें?

मैं, Git अंदर संघर्ष से निपटने के लिए एक नई शाखा के रूप में पैच को जोड़ने और यह मास्टर करने के लिए विलय वापस द्वारा चाहते हैं। लेकिन ऐसा करने के लिए मुझे सबसे पहले प्रतिबद्धता का पता लगाने की आवश्यकता है कि पैच साफ-सफाई पर लागू हो सकता है। क्या गिट में ऐसा करने का कोई आसान तरीका है?

उत्तर

12

आप git bisect के साथ ऐसा करने में सक्षम होना चाहिए: सामान्य रूप में द्विभाजन शुरू करते हैं, और उसके बाद का उपयोग करें:

git bisect run git apply --check ${patch} 

है कि आदेश का उपयोग होगा - "इस पैच लागू कर सकते हैं" - अगर एक संशोधन है निर्धारित करने के लिए अच्छा या बुरा, स्वचालित रूप से। आपको तुरंत बाद में सही स्थान बदलना चाहिए।

इससे आपको सबसे हालिया देगा जहां पैच लागू होगा।

आप जल्द से जल्द चाहते हैं, के साथ परीक्षण के रूप में "लागू नहीं होता है", भंडार की शुरुआत और जगह कि इसे सफलतापूर्वक लागू होता है के बीच एक दूसरे द्विविभाजित चलाते हैं।

+0

'Git bisect' एक अच्छा संशोधन की ज़रूरत है, और अगर मैं जानता था, मैं इस समस्या नहीं होती। :( –

1

यदि पैच ब्लॉब्स की पहचान रिकॉर्ड करता है, तो इसे लागू करने के लिए git apply --3way का उपयोग कर सकते हैं यदि पैच साफ-सफाई लागू नहीं करते हैं तो तीन-तरफा विलय पर फ़ॉलबैक के लिए।

man git apply से

:

-3, --3way

पैच सफाई से लागू नहीं होता है, 3-रास्ते पर वापस गिर विलय पैच ब्लॉब की पहचान यह माना जाता है में दर्ज करता है पर लागू होते हैं, और हम उन धब्बे स्थानीय रूप से उपलब्ध है, संभवतः उपयोगकर्ता को हल करने के लिए काम कर पेड़ में फ़ाइलों में संघर्ष मार्करों छोड़कर। यह विकल्प - इंडेक्स विकल्प का तात्पर्य है, और --reject और --cached विकल्पों के साथ असंगत है।

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