2011-02-19 5 views
11

से निपटने के लिए कैसे लोग स्थानीय और रिमोट के बीच विभिन्न शेबैंग से निपटते हैं?गिट: विभिन्न शेबैंग

उदाहरण के लिए, मेरा स्थानीय पायथन/usr/bin/पायथन है, जबकि मेरा वेब होस्ट ~/local/bin/python पर एक उद्देश्य-निर्मित पायथन है। एक लीड डेवलपर में/usr/bin/ruby ​​पर रूबी हो सकती है, जबकि मेरा/usr/local/bin/ruby ​​है।

मैं मैन्युअल रूप से शेबांग संपादित करता हूं, लेकिन फिर गिट इसे एक परिवर्तन के रूप में चिह्नित करता है। आदर्श रूप में, मैं फ़ाइल की पहली पंक्ति को अनदेखा करना चाहता हूं, या शायद फ़ाइल के भीतर लाइनों के रेगेक्स मैच को अनदेखा करना चाहता हूं।

ऐसा लगता है कि यह एक बहुत ही आम समस्या होनी चाहिए, लेकिन मुझे इसका कोई उल्लेख नहीं मिल रहा है।

मैं गिट का उपयोग करता हूं, लेकिन मैं किसी भी खिंचाव से खुद को एक विशेषज्ञ नहीं कहूंगा।

+5

क्या यह नहीं है कि '#!/Usr/bin/env python' क्या है? – coreyward

+0

@coreyward: [यह सवाल] देखें (http://unix.stackexchange.com/q/29608/10454) और [मेरा उत्तर] (http://unix.stackexchange.com/a/29620/10454) के लिए '#!/usr/bin/env' हैक के फायदे और दोषों की चर्चा। –

उत्तर

18

#!/usr/bin/env python 

या

#!/usr/bin/env ruby 

को बदलें यह तो यह जो आपने अपना PATH वातावरण चर में अजगर और गहरे लाल रंग का है, तो आपके सभी सिस्टम पर काम करना चाहिए।

+0

पाथ मुद्दा है। मेरे पास वेब-होस्ट पर ~/स्थानीय/बिन/पायथन में कस्टम-निर्मित पायथन है। मैं वेब सर्वर के लिए पथ नहीं बदल सकता क्योंकि मेरे पास रूट नहीं है। हर बार जब मैं पुल या पुश करता हूं तो शेबांग को बदलना बहुत परेशान होता है। –

+0

[जारी ...] मुझे लगता है कि मेरा असली सवाल "लाइन स्तर पर परमाणु बनाया जा सकता है" और जवाब "नहीं, यह फ़ाइल स्तर पर परमाणु है"। –

+0

आपको शायद रूट की आवश्यकता नहीं है। आप स्क्रिप्ट कैसे चला रहे हैं? कमांड लाइन? एक वेब पेज के माध्यम से? क्रॉन के माध्यम से? – Mikel

0

यह टिप्पणियों में है लेकिन मेरे पास अभी तक पर्याप्त प्रतिष्ठा नहीं है ... आप केवल हैश बैंग को हटा सकते हैं और हमेशा इसे python के साथ चला सकते हैं जब आप इसे कमांड लाइन से चलाते हैं ... शायद ...

3

आपकी समस्या का समाधान गिट की धुंध/साफ फ़िल्टर नियम है। यह आपको फ़िल्टर सेट अप करने की अनुमति देता है जो चेकआउट पर फ़ाइलों को संशोधित करेगा और चेकइन पर उन परिवर्तनों को पूर्ववत करेगा। यहाँ एक अच्छा ग्राफिक है:

enter image description here

पहले एक फिल्टर है कि दोनों दिशाओं में परिवर्तन कर सकते हैं, आप .git/config के लिए निम्न की तरह कुछ जोड़कर की स्थापना की। धुंध फ़िल्टर रिपो में फ़ाइल को प्रतिलिपि प्रतिलिपि में बदल देता है, साफ फ़िल्टर उस परिवर्तन को पूर्ववत करता है। यह महत्वपूर्ण है कि धुंध चलाना -> साफ मूल रूप से मूल फ़ाइल उत्पन्न करता है। यहां दिए गए फिल्टर अगर यह रेपो

[filter "pyshebang"] 
    smudge = sed '1s?^#!/usr/bin/env python$?#!~/local/bin/python?' 
    clean = sed '1s?^#!~/local/bin/python$?#!/usr/bin/env python?' 

अब इस तरह की एक पंक्ति जोड़कर इस फिल्टर को सक्रिय/जानकारी/विशेषताएं (कि फ़ाइल बनाने .git में #!/usr/bin/env python है काम कर नकल में #!~/local/bin/python साथ पहली पंक्ति का स्थान ले लेगा अगर यह मौजूद नहीं है):

*.py filter=pyshebang 

अपने अजगर फ़ाइलें .py में खत्म नहीं है, सिर्फ सही फ़ाइलें/एक पूरी फ़ोल्डर/सभी फाइलों पर फिल्टर कॉन्फ़िगर करें। यदि आप फ़िल्टर को सही तरीके से सेट अप करते हैं तो यह केवल एक पायथन शेबैंग के साथ फ़ाइलों को बदल देगा।

मैं क्या हो रहा है के विवरण को समझने के लिए smudge filters पर पढ़ने की अनुशंसा करता हूं।

+0

डाउनवोट क्यों? – Chronial