2011-10-21 8 views
5

गिट उन्हें मर्ज करने की कोशिश करने से पहले फ़ाइलों पर कुछ प्री-प्रसंस्करण का आह्वान करने में सक्षम होना चाहते हैं, और पोस्ट-प्रक्रिया विलयित परिणाम। यहां सामान्य विचार यह है कि कुछ फ़ाइलों को स्वचालित रूप से विलय करना मुश्किल होता है, लेकिन प्रोसेसिंग के लिए एक आसान रूप में परिवर्तित किया जा सकता है। यहां मेरा ठोस उपयोग केस है:मैं प्री-और पोस्ट-प्रोसेसिंग के साथ गिट फ़ाइल विलय कैसे लपेटूं?

मेरे पास अधिकतर संवेदनशील डेटा का भंडार नहीं है। उस भंडार के भीतर, मेरे पास sensitive.pgp नामक फ़ाइल में एन्क्रिप्टेड संवेदनशील डेटा का थोड़ा सा हिस्सा है। मुझे यह व्यवस्था पसंद है क्योंकि मुझे विश्वास नहीं है कि मेरा भंडार सुरक्षित रूप से प्रबंधित किया जा रहा है, मुझे बस एन्क्रिप्शन और पासवर्ड पर भरोसा करना है। निश्चित रूप से पकड़ यह है कि गिट संभवतः एन्क्रिप्टेड टेक्स्ट को मर्ज नहीं कर सकता है, इसलिए यदि sensitive.pgp एक बार में दो चेकआउट में संशोधित किया गया है, तो कोई विलय उपलब्ध नहीं है - भले ही स्पष्ट टेक्स्ट में परिवर्तन आसानी से अलग हो जाएं। मैन्युअल वर्क-फ्लो इस तरह है:

  1. sensitive.pgp के लिए संघर्ष विलय करें।
  2. गिट-मेरेटूल शुरू करें। टूल भी पीजीपी फाइलों को मर्ज करने में विफल रहता है।
  3. अब मेरे पास मेरे संस्करण, मूल संस्करण और दूरस्थ संस्करण के लिए अस्थायी फ़ाइलें हैं।
  4. सभी तीन फ़ाइलों को डिक्रिप्ट करें।
  5. डिक्रिप्ट किए गए संस्करणों पर मेरे विलय टूल को आमंत्रित करें।
  6. परिणाम एन्क्रिप्ट करें।
  7. गिट-नया sensitive.pgp जोड़ें।

मैं गिट को अपने प्री-एंड-प्रोसेसिंग को लागू करने से पहले बताना चाहता हूं इससे पहले कि यह विलय करने का प्रयास करता है, इसलिए यह स्वचालित रूप से इसे संभाल सकता है। मैं एक ही सामान्य पैटर्न के साथ कई अन्य परिदृश्यों की कल्पना कर सकता हूं: उदाहरण के लिए, जब भी आपके पास टेक्स्ट-जैसी अंतर्निहित संरचना (उदा। पीडीएफ, ओपनऑफिस, वर्ड) के साथ संपीड़ित फ़ाइल प्रारूप होता है, तो बहुत कुछ।

कोई सुझाव?

+0

बोनस पॉइंट्स: क्या इस ऑपरेशन को केवल विशिष्ट फाइलों या फ़ाइल प्रकारों पर ही कॉन्फ़िगर करने का कोई तरीका है, इसके अलावा उस तर्क को पूर्व-पोस्ट-प्रोसेसिंग में डालने के अलावा? –

उत्तर

4

आप कुछ ही विकल्प हैं:

  1. .gitattributes (git help attributes देखें) में एक चेकआउट/चेकइन फ़िल्टर निर्धारित कि चेकआउट पर फ़ाइलों decrypts (उन्हें छोड़ने के अपने काम के पेड़ के दौरान एन्क्रिप्ट) और
  2. में जाँच से पहले उन्हें एन्क्रिप्ट करता है
  3. एक कस्टम मर्ज ड्राइवर (git help attributes देख सकते हैं और git help config में merge.<driver>.* विकल्प)
  4. एक कस्टम मर्ज उपकरण (git help mergetool देख सकते हैं औरमें mergetool.<tool>.* विकल्पों को परिभाषित परिभाषित) कि असली मर्ज उपकरण लागू करने से पहले decrypts और जब असली मर्ज उपकरण रिटर्न

उस Git कॉन्फ़िगर केवल कस्टम फ़िल्टर लागू करते हैं और विशिष्ट फ़ाइलों को मर्ज करने के लिए ड्राइवरों कर सकते हैं एन्क्रिप्ट करता है, लेकिन मर्ज उपकरण पूरे भंडार जब तक पर लागू होता है आप git mergetool कमांड पर फ़ाइल नाम पास करके इसे सीमित कर सकते हैं। विलय होने के नाम के आधार पर आप अपने कस्टम मर्ज टूल को अपने व्यवहार को बदलने के लिए डिज़ाइन कर सकते हैं।

+0

बहुत बहुत धन्यवाद। मैंने एक कस्टम मर्ज ड्राइवर के साथ tinkering शुरू कर दिया है, और यह एक अच्छा समाधान की तरह दिखता है। –

+1

यहां एक मर्ज ड्राइवर है जो वास्तव में यह करता है: https://gist.github.com/2480455 –

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