2010-05-28 8 views
11

मैं विंडोज़ पर होने पर कोड प्रबंधित करने के लिए fugitive.vim के साथ गिट का उपयोग कर रहा हूं। हालांकि, मैं एक समस्या में भाग गया है। documentation के अनुसार,: GDiff कमांड को एक भिन्न विंडो चाहिए और मुझे फ़ाइल के केवल कुछ हिस्सों को मंचित करने की अनुमति दें। हालांकि, जब मैं परिवर्तन के साथ फ़ाइल में कमांड जारी करता हूं, तो मुझे निम्न त्रुटि संदेश मिलता है: alt textविंडोज़ और एमएसआईएस गिट के लिए gvim का उपयोग कर fugitive.vim का GDiff कमांड 1.7.0.2

क्या यह विंडोज़ के साथ समस्या है? vim? भगोड़ा? msysgit? फ़ाइल अनुमतियाँ? किसी को पता है?

+3

मेरे पास * _exact_ * एक ही समस्या है - कृपया हमें बताएं कि यह कैसे हल किया गया है या नहीं! – Charles

उत्तर

1

यह issue 428 of msysgit mentioned in my SO answer से संबंधित हो सकता है।

cmd/git.cmd को पैच करने का प्रयास करें जैसा कि मैंने अपने पिछले उत्तर में वर्णन किया है और यह सहायता है या नहीं।

बैरिंग कि, 2 विकल्प रहता है:

  • या तो एक ताला समस्या (फ़ाइल एक प्रक्रिया के द्वारा अवरोधित किया गया है): process monitor या process explorer की तरह एक उपयोगिता अगर यह मामला है देखने के लिए और मदद कर सकता है (क्या संभाल बिल्कुल उस स्वैप फ़ाइल पर है)
  • या एक गिट समस्या। एक अच्छी चाल तब msysgit के नेट-इंस्टॉलर को स्थापित करने के लिए है, जो आपके विंडोज़ पर गिट का नवीनतम संस्करण तैयार करेगी। फिर आप कोशिश कर सकते हैं और देख सकते हैं कि समस्या उस अद्यतन संस्करण के साथ बनी रहती है या नहीं।
    नोट: तीसरा विकल्प, गिट को डाउनग्रेड करने का प्रयास कर रहा है, फिर उस उपकरण के साथ किसी भी लिंक को रद्द करने के लिए।
+0

मैंने पहले ही git.cmd को पैच किया है, जिसने पहले के मुद्दे को ठीक किया था (इसके लिए धन्यवाद, वैसे भी। –

+0

@ पॉल: मुझे एहसास नहीं हुआ कि आप पिछले प्रश्न पूछ रहे थे! ;) – VonC

+0

@ पॉल: मैंने कुछ और परीक्षणों के साथ अपना जवाब अपडेट कर दिया है। – VonC

1

बीटीडब्ल्यू एक ही त्रुटि मुझे मिली, जब मैंने कोशिश की: gdiff unsaved फ़ाइल - जब मैंने इसे सहेजा (: w) यह काम करता है!

14

मुझे एक ही समस्या थी - यहां मैंने इसे कैसे ठीक किया है।

डिफ़ॉल्ट रूप से, विम मूल के बगल में स्वैप फ़ाइलों को स्टोर करने का प्रयास करेगा। भगोड़ा एक बफर बनाता है जो किसी भी वास्तविक फ़ाइल पथ से मेल नहीं खाता है, इसलिए जब यह स्वैप फ़ाइल बनाने का प्रयास करता है तो Vim barfs। समाधान यह सुनिश्चित करना है कि विम के पास पथ है लिख सकते हैं।

if has("win32") || has("win64") 
    set directory=$TMP 
else 
    set directory=~/tmp 
end 

यहाँ GitHub पर मूल मुद्दा है:

यहाँ कैसे मैं इस तय है https://github.com/tpope/vim-fugitive/issues/9

संपादित करें:

बाहर नीचे fow अंक के रूप में, यह शायद बेहतर कुछ का उपयोग करने के निम्न की तरह:

set directory+=,~/tmp,$TMP 

विम को पहले पथ का उपयोग करना चाहिए।

+1

यह ध्यान देने योग्य हो सकता है कि 'निर्देशिका' विकल्प निर्देशिका की एक सूची है, और विम पहले व्यक्ति का उपयोग करेगा। 'सेट निर्देशिका + = $ टीएमपी' की तरह, पूरी चीज़ को समाप्त करने के बजाय सूची में केवल मूल्य जोड़ना सर्वोत्तम होता है। यूनिक्स में डिफ़ॉल्ट रूप से '~/tmp' जोड़ा जाता है, और ओएसआईक्स पर' $ TMP' खाली होने के बाद भी ओएस चेक के बिना ऐसा करना सुरक्षित है, और यह भी कुछ भी नहीं करेगा – fow

+0

@fow: +1 - मुझे आवश्यकता है ',' जब मैं 'निर्देशिका + =' सेट करता हूं, तो सही (क्योंकि यह एक टिप्पणी सीमित सूची है)? – Charles

+0

इसके अलावा, 'निर्देशिका सेट करें = = $ टीएमपी' सेट करें (देखें [': मदद: सेट^='] (http://vimhelp.appspot.com/options.txt.html#%3Aset%5E%3D))। –

2

मेरे पास विंडोज मशीन नहीं है, लेकिन मै मैक ओएस एक्स 10.6 सिस्टम पर इस समस्या को पुन: उत्पन्न और अलग करने में सक्षम था।

या तो बनाने C:\TMP या C:\TEMP (:help 'directory' का कहना है दोनों विंडोज पर directory विकल्प का डिफ़ॉल्ट मान में हैं विम के बनाता है), या directory विकल्प के मूल्य के लिए एक मौजूदा निर्देशिका जोड़ें।(फिर से, कोई विंडोज यहाँ)

मैं अपने घर निर्देशिका के अंतर्गत एक विम विशेष अस्थायी निर्देशिका का उपयोग करें और दो पीछे चल स्लैश (~/tmp/.vim-swaps//) जोड़ें। इस प्रकार की सेटिंग स्वैप फाइलों को केंद्रीकृत करती है लेकिन उन्हें संपादित किए जा रहे फ़ाइलों की निर्देशिकाओं के आधार पर अद्वितीय नाम देती है। :help :swapname में :help 'directory' में :help :swapname के साथ-साथ "यदि कोई निर्देशिका दो पथ विभाजक में समाप्त होती है" में "लाभ" और "नुकसान" देखें।

उपयोग ^= अपने निर्देशिका पहले जोड़ें करने के लिए (इतना है कि यह हमेशा प्रयोग किया जाता है, यदि वह मौजूद है):

set directory^=C:\\some\\existing\\directory// 

या, += का उपयोग अपने निर्देशिका संलग्न करने के लिए (इतना है कि यह केवल अगर यह प्रयोग किया जाता है मौजूद है और कोई अन्य लागू directory प्रविष्टियों मौजूद हैं):

set directory+=C:\\some\\existing\\directory// 

Charles’ answer पता चलता है कि $TMP (एक वातावरण चर के लिए एक संदर्भ) हो सकता है एक अच्छा मूल्य विंडोज के लिए:

set directory+=$TMP// 

मूल कारण :Gdiff के सूचकांक "छद्म" फ़ाइल का पथ नाम के साथ संयुक्त directory विकल्प का डिफ़ॉल्ट मान से संबंधित है।

एक :Gdiff देखने के सूचकांक पक्ष के लिए बफर एक विशेष पथ कि fugitive:///path/to/repository/.git//0/path/to/file/under/repository तरह लग रहा है (भगोड़ा कैप्चर पढ़ता है और ऐसा नाम बफ़र्स के लिए लिखते हैं और Git "पाइपलाइन" आदेशों लागू द्वारा सूचकांक करने के लिए उन्हें रीडायरेक्ट) का उपयोग करता है।

directory में पहली प्रविष्टि आमतौर पर . होती है। इसका अर्थ यह है कि विम एक ही निर्देशिका में स्वैपफ़ाइल को संपादित फ़ाइल के रूप में रखने का प्रयास करेगा (यानी foo/bar.txtfoo/.bar.swp का उपयोग करने का प्रयास करेगा)। यदि यह पसंदीदा स्वैपफ़ाइल नहीं बनाया जा सकता है, तो directory से आने वाली प्रविष्टियों का प्रयास किया जाएगा।

. पहले directory के रूप में साथ

, fugitive:///path/to/repository/.git//0/path/to/file/under/repository के लिए पसंदीदा swapfile fugitive:///path/to/repository/.git//0/path/to/file/under/.repository.swp हो जाएगा। इस पथनाम के प्रमुख घटक (fugitive:, path, to, आदि) शायद मौजूद नहीं हैं, इसलिए विम directory से अगली प्रविष्टि पर जायेगा। यदि अन्य directory प्रविष्टियों में से कोई भी स्वैप फ़ाइलों को बनाने के लिए उपयोग योग्य नहीं है (उदा। वे मौजूद नहीं हैं), तो आपको त्रुटि E302 मिलती है।

मैं set directory=.,~/no-such-dir,/var/no-such-dir,/no-such-dir का उपयोग करके एक यूनिक्स y सिस्टम पर आपकी समस्या को पुन: पेश करने में सक्षम था (अर्थात डिफ़ॉल्ट यूनिक्स मूल्य लेने और no-such-dir को tmp की घटनाओं को बदलना)। वास्तव में "नो-ऐसे-डीआईआर" निर्देशिका में से कोई भी अस्तित्व में नहीं था। जब मैं :Gdiff का उपयोग करता हूं तो मुझे वही त्रुटि मिलती है।

:help :set^= केवल "जोड़ें" कहते हैं, लेकिन कोड से पता चलता है कि set listopt^=… कैसे set listopt+=… संलग्न कर देता है के लिए इसी तरह पहले जोड़ता है (उत्तरार्द्ध के रूप में करने के लिए प्रलेखित है)। दोनों को आवश्यक रूप से कॉमा को सम्मिलित करना चाहिए (हालांकि इस क्षेत्र में बग हो सकते हैं)।

+0

मुझे आश्चर्य है कि क्यों फ्यूजिवेट उन दोनों को पढ़ने और लिखने की अनुमति देता है: fzzitive: /// path/to/repository/.git // 0/path/to/file/under/repository' buffers? वे केवल पढ़ने के लिए क्यों नहीं हैं? मेरे मामले में मैं उन बफर को संशोधित कर सकता हूं, और यदि मैं उन्हें सहेजता हूं और फिर 'गिट diff' निष्पादित करता हूं, तो आउटपुट प्रभावित होता है। –

+1

@ ह्ईफोंग: 'गिट diff --cached' भी कोशिश करें। उन छद्म-पथनामों के साथ (जैसे 'fugitive: // .../.git // 0/...'), उन्हें संपादित करना और सहेजना अगली प्रतिबद्धता के लिए आयोजित की गई सामग्री को सीधे बदलने के बराबर है (यानी गिट की "अनुक्रमणिका" चरण 0)। यदि आप अपनी अगली प्रतिबद्धता तैयार करने के लिए इंडेक्स का उपयोग करने में विश्वास रखते हैं, तो यह एक शक्तिशाली टूल हो सकता है (जैसे 'गिट एड' या 'गीट रीसेट' '--patch' के साथ, लेकिन अधिक प्रत्यक्ष)। यदि आप इंडेक्स का उपयोग करना पसंद नहीं करते हैं, तो आप 'गीट रीसेट ' (या ': बफर में प्रश्न में ग्रेड -') के साथ अपनी सामग्री को "साफ़" कर सकते हैं (इसे हेड मैच करें)। –

+0

वाह, यह बताता है। धन्यवाद –

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