मैं किसी अन्य गिट शाखा से फाइल कैसे खोलूं?


35

मैं वर्तमान गिट रिपॉजिटरी में एक अन्य शाखा से एक फ़ाइल खोलना चाहता हूं। मैंने इस एसओ प्रश्न को देखा है , लेकिन इसे विम के साथ संयोजित करने के सुझाव बोझिल हैं (पाइप से विम, खुली स्टड, सेट फिलाटाइप, आदि मैन्युअल रूप से)। वहाँ एक सरल तरीका है जो सिंटैक्स हाइलाइटिंग, फ़िलेटाइप सेटिंग्स, आदि को बनाए रखता है?

यदि यह मदद करता है:

  • मेरे पास भगोड़ा प्लगइन स्थापित है (हालांकि शायद ही कभी इस्तेमाल किया जाता है)।
  • मुझे इसे संशोधित करने की आवश्यकता नहीं है।

फ़ाइल वर्तमान में खुले बफर या एक अलग के लिए फ़ाइल हो सकती है।

जवाबों:


49

आप फॉर्म के साथ :Gedit/ :Gsplit/ :Gvsplit/ ... का उपयोग कर सकते हैं{revision}:{filename}

:Gedit branch:/foo/bar.c

नोट: यदि फ़ाइल वर्तमान फ़ाइल के रूप में ही है तुम इतनी तरह आदेश को संक्षिप्त कर सकते हैं: :Gsplit branch:%

यह अक्सर ऐसा होता है कि एक अलग शाखा पर फ़ाइल को खोलने की तुलना में वर्तमान फ़ाइल का एक अंतर पसंद किया जाता है। आप इसके माध्यम से कर सकते हैं :Gdiff {branch}

अधिक मदद के लिए देखें:

:h fugitive-:Gedit
:h fugitive-revision
:h fugitive-:Gdiff
:h c_%

तुम भी भगोड़ा श्रृंखला में Vimcasts एपिसोड की जाँच करना चाहते हो सकता है ।


सुंदर! जिज्ञासु: यदि मैं किसी फ़ाइल को संशोधित करता हूँ तो क्या होगा?
मुरु

1
@ एमआरयू आप देखेंगे कि बफर केवल रीड बफर में खोला जाता है (शायद [RO]स्टेटस लाइन में नोटिस करें )।
पीटर रिंकेर

हाँ, यह वहाँ है।
मुरु

fugitiveरिपोजिटरी की जड़ से मार्ग की जरूरत है। उत्तर पहले से ही इसे कवर करता है, लेकिन मैंने गलत तरीके से माना कि भगोड़ा समझ सकता है जब हम रेपो के एक विशेष उपनिर्देशिका में हैं।
पास्कलिस

अद्भुत .. पहली बार भगोड़े का उपयोग करते हुए .. भले ही मैंने इसे लंबे समय तक स्थापित किया था :)
अल्फा_989

14

यह ओपी द्वारा पूछे जाने की तुलना में थोड़ा अधिक व्यापक है, लेकिन लोग प्लगइन्स का उपयोग नहीं करना चाहते हैं, और संभवतः अन्य संशोधन नियंत्रण प्रणाली, यह थोड़ा स्निपेट काफी अच्छी तरह से काम करता है:

:new
:r! git show branch:file
:1d

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

Bzr के लिए उदाहरण (जहां REV सिंटैक्स एक शाखा निर्दिष्ट कर सकता है):

:new
:r! bzr cat -r REV file
:1d

Hg के लिए उदाहरण (hg में शाखाओं के बारे में निश्चित नहीं है; इसका पर्याप्त उपयोग न करें)

:new
:r! hg cat -r REV file
:1d

Svn के लिए उदाहरण (

:new
:r! svn cat file@REV
:1d

आप अभी भी एसओ पदों की तरह सिंटैक्स हाइलाइटिंग प्राप्त करने के लिए फ़िलाटाइप सेट करना चाहते हैं, लेकिन कम से कम आपको पाइपिंग के साथ गड़बड़ करने की ज़रूरत नहीं है।

एक बार खोलने के बाद आप इसे एक नए नाम के साथ :w filenameया इसके :saveas filenameबाद से सहेज सकते हैं , क्योंकि विम के लिए अभी तक इसका कोई फ़ाइल नाम नहीं होगा। यदि आप इसे संपादित करने में सक्षम नहीं होना चाहते हैं, तो आप एक :setlocal readonlyऔर / या में भी फेंक सकते हैं :setlocal nomodifiable

-Edit: स्वचालित फ़िल्टर

यह थोड़ा अधिक काम है, लेकिन आप विम को फिल्म के साथ अनुमान लगाने के लिए कह सकते हैं

:filetype detect

लेकिन, चूंकि विम का अभी तक कोई नाम नहीं है, यह हमेशा अच्छी तरह से काम नहीं करता है (उदाहरण के लिए, मैंने कुछ सी कोड में खींचा और यह अनुमान लगाया गया filtype=conf

हम इसे सहेजकर एक नाम दे सकते हैं, लेकिन हम संभवतः मौजूदा फ़ाइल को अधिलेखित नहीं करना चाहते हैं। हम केवल फ़ाइल नाम भी सेट कर सकते हैं (धन्यवाद @PeterRincker!), लेकिन फिर से, हम टकरावों का जोखिम नहीं उठाना चाहते हैं। चूँकि यह संभावना नहीं है कि एक फाइल मौजूद है जो ब्रांचनाम और फाइलनेम दोनों एक साथ है, हम उन्हें कुछ विपरीत परीक्षक के साथ समेटेंगे

:exe "silent file " . "branch" . "-" . "file"
:filetype detect

जहां "file"वास्तविक फ़ाइल नाम और "branch"शाखा नाम के साथ प्रतिस्थापित किया गया है

बेशक, इस बिंदु पर हम लगभग एक प्लगइन लिख रहे हैं; ;-)

यह सब एक साथ करना, यहाँ यह एक विशिष्ट कार्य के रूप में है जिसे आप अपने vimrc में छोड़ सकते हैं:

function! GitFile(branch,file)
    new
    exe "silent r! git show " . a:branch . ":" . a:file
    1d
    exe "silent file " . a:branch . "-" . a:file
    filetype detect
    setlocal readonly     "don't allow saving
    setlocal nomodified   "allow easy quitting without saving
    setlocal nomodifiable "don't allow modification
endfunction

जिसे आप कमांड में लपेट सकते हैं या सीधे कॉल कर सकते हैं जैसे call GitFile("whateverBranch","myfile.c")। आपको एक बफर नाम की एक नई विंडो मिलेगीwhateverBranch-myfile.c


और क्या मैं इसे इस विधि के साथ फाइलटाइप, सिंटैक्स आदि का पता लगाने के लिए प्राप्त कर सकता हूं?
मूर

दुख की बात है कि कुछ और काम के बिना नहीं; मैंने पोस्ट को अपडेट किया
जॉन ओ'एम।

1
यदि आप कर सकते हैं तो मैं @ पीटररिनर के पोस्ट से प्लगइन विधि का उपयोग करने की सलाह देता हूं। यह बहुत सारी अच्छी चीजें करना चाहिए जो आप चाहते हैं। मैं ज्यादातर यह दिखाना चाहता था कि किसी को संपादक को छोड़ने की ज़रूरत नहीं है और न ही डेटा प्राप्त करने के लिए पाइपिंग के झंझटों से निपटने की जरूरत है, और मुझे पता है कि कुछ लोग हैं जो प्लगइन्स का उपयोग करने से नफरत करते हैं।
जॉन ओ.एम.

1
मैंने अभी थोड़ा सा जोड़ा है ताकि फिलामेंट का पता लगाया जा सके। यह अब ऐसा कुछ नहीं है जिसे आप केवल-पर-टाइप करना चाहते हैं, लेकिन एक .vimrc के लिए एक आसान जोड़ के रूप में काम कर सकते हैं। एक विशिष्ट प्लगइन का उपयोग करना अभी भी शायद बेहतर काम करेगा।
जॉन ओ.एम.

आप :fileअपनी फ़ाइल का नाम अस्थायी फ़ाइल रखने के बजाय उपयोग करना चाह सकते हैं । देखें:h :file
पीटर रिंकेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.