2009-05-30 15 views
9

मैं git.el को कॉन्फ़िगर करने की कोशिश कर रहा हूं। जब मैं Git-स्थिति करना मैं मैं भी 'एक' का उपयोग करके फ़ाइलें जोड़ सकते हैं लेकिन जब मैं ग लॉग प्रतिबद्ध लेखन और प्रतिलिपि प्रतिलिपि के साथ इसे पूरा करने का उपयोग कर एक फ़ाइल के लिए प्रतिबद्ध करने की कोशिश मुझेemacs के साथ गिट का उपयोग

env: git: No such file or directory 
देता बदल के साथ स्थिति बफर देख सकते हैं

त्रुटि और फ़ाइल प्रतिबद्ध नहीं है। मैं Emacs 23 उपयोग कर रहा हूँ OS X पर केवल अनुकूलन मैं अपने .emacs को जोड़ा गया

(setq exec-path (append exec-path '("/opt/local/bin"))) 

क्योंकि Emacs Git निष्पादन योग्य खोजने में असफल रहा है।

+0

कमांड लाइन पर 'कौन सा गिट' का आउटपुट क्या है? –

+0

/ऑप्ट/स्थानीय/बिन/गिट –

उत्तर

20

मैक ओएस एक्स के लिए मेरे .emacs में मैं कोड निम्नलिखित है:

(when (equal system-type 'darwin) 
    (setenv "PATH" (concat "/opt/local/bin:/usr/local/bin:" (getenv "PATH"))) 
    (push "/opt/local/bin" exec-path)) 

ऐसा लगता है, कि समस्या यह है, कि यह सेटअप करने के लिए अपने खोल आरंभीकरण फ़ाइल का उपयोग जब आप terminal.app चलाने सभी वातावरण चर , लेकिन जब आप डॉक से Emacs लॉन्च करते हैं, तो इन चर सेट नहीं होते हैं।

पीएस वैसे - Emacs - गिट, डीवीसी, अंडे से गिट के साथ काम करने के लिए अन्य पैकेज हैं ...आप उनके बारे में my article

+0

: (संदेश "% S" exec-path) -> सी-एक्स-ई – yboussard

+0

सी-एच वी exec-path तेज़ है ;-) –

+0

अच्छा ब्लॉग पोस्ट, धन्यवाद। –

5

ठीक है, क्योंकि त्रुटि रेखा की शुरुआत env: है, यह बताती है कि git.el गिट खोजने और इसे कॉल करने के लिए प्रोग्राम "env" का उपयोग कर रहा है। स्रोत को देखते हुए Git के लिए सभी कॉल के बाद से इस बात की पुष्टि करता यहाँ के माध्यम से जाना दिखाई देते हैं: कोड के माध्यम से

(defun git-call-process-env (buffer env &rest args) 
    "Wrapper for call-process that sets environment strings." 
    (if env 
     (apply #'call-process "env" nil buffer nil 
      (append (git-get-env-strings env) (list "git") args)) 
    (apply #'call-process "git" nil buffer nil args))) 

स्कैन से पता चला कि ज्यादातर मामलों में, Emacs Git सीधे call-process साथ कहता है, लेकिन यह कभी कभी "env" कमांड का उपयोग करता है , विशेष रूप से जब इसे पर्यावरण चर (जैसे "GIT_INDEX_FILE") पास करने की आवश्यकता होती है।

समस्या Emacs जब call-process के माध्यम से यह चल रहा है, तो Emacs में exec-path स्थापित करने में मदद नहीं करेगा `env 'Git खोजने के पास नहीं है कि यह है exec-pathenv है।

  1. चित्रा बाहर env पाने के लिए पता करने के लिए जहां Git है:

    वास्तव में दो समाधान कर रहे हैं। मुझे डर है कि मैं वास्तव में इस पर आपकी सहायता नहीं कर सकता, क्योंकि मुझे नहीं पता कि मैक पर उस तरह की चीज कैसे सेट अप करें, लेकिन यह पथ का एक काफी सरल संशोधन होना चाहिए।

  2. गिट कॉल करते समय env को PATH=/path/to/git पास करने के लिए हैक git.el हैक। यह कम साफ है, लेकिन यह हैक का इतना बुरा नहीं है, और विशेष रूप से यदि आपने defcustom में पथ की पसंद की है, तो यह दूसरों के लिए उपयोगी हो सकती है।

मैं 1 के साथ शुरू करने का सुझाव दूंगा। आप Emacs के लिए पर्यावरण चर बदल सकते हैं:

(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH"))) 

और फिर git.el को आजमाएं। जबकि Emacs exec-path को बाल प्रक्रियाओं में परिवर्तनीय पास नहीं करता है, यह इसके पाथ पर्यावरण परिवर्तक के साथ जो कुछ भी लगाया गया था उससे प्रतिलिपि बनाता है। चूंकि Emacs सीधे गिट भी कॉल करता है, इसलिए आपको पहले से ही exec-path सेट करने की आवश्यकता होगी।

उम्मीद है कि मदद करता है।

+0

गिट निष्पादन योग्य मेरे पथ में है। मैं टर्मिनल में गिट टाइप भी कर सकता हूं एनवी गिट निष्पादित गिट। लेकिन अभी भी emacs इसे ढूँढने में विफल रहता है। निष्पादन पथ देखने के लिए –

0

में इस समस्या को हल करने के लिए एक बहुत ही सरल तरीका पढ़ सकते हैं अपने .emacs में कार्यकारी पथ को संशोधित करने के लिए फ़ाइल

(add-to-list 'exec-path "/usr/local/git/bin/") 

यह मेरे लिए काम कर देता है है।

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