एक नए नाम के तहत फ़ाइल के पुराने संशोधन की जाँच करें


264

मेरे पास main.cppमेरे संपादक में फ़ाइल " " खुली है।

मैं "का पिछला संशोधन देखना चाहता हूँmain.cpp संपादक में " ।

अब मैं जिस तरह से करता हूं वह इस तरह है।

close "main.cpp" in the editor

prompt> mv main.cpp tmp
prompt> git checkout HEAD^ main.cpp
prompt> mv main.cpp old_main.cpp
prompt> mv tmp main.cpp
prompt>

open "main.cpp" and "old_main.cpp" in the editor

क्या इसे सरल बनाया जा सकता है, इसलिए मुझे संपादक में "main.cpp" को बंद करने की आवश्यकता नहीं है?

मैं जिस चीज की उम्मीद कर रहा हूं, वह इसका एक प्रकार है git-checkoutजो यह कर सकता है।


अद्यतन: मैक ओएसएक्स 10.5.7 पर गिट का उपयोग करके

prompt> git --version
git version 1.6.0.4
prompt> 

UPDATE2: जैकब नारबस्की उत्तर है:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>

UPDATE3: विशिष्ट संशोधन के लिए कर्मी का जवाब:

prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt> 

आप किस संपादक का उपयोग करते हैं? शायद यह प्लगइन / addon / Git के लिए समर्थन जोड़ने मॉड्यूल है?
जकुब नारबस्की

मैं टेक्स्टमेट का उपयोग करता हूं। यह कुछ git समर्थन है, मैं अगर यह कर सकते हैं यह जाँच नहीं है।
नियनी

टेक्स्टमेट में git बंडल है: github.com/timcharper/git-tmbundle (आपको git wiki पर InterfacesFrontendsAndTools पेज की जाँच करनी चाहिए: git.or.cz/gitwiki )
Jakub Narębski

वैसे, Emacs में वीसी इंटरफेस (जिसके लिए git को vc-git.el के रूप में भी समर्थन है) में 'अन्य संस्करण दिखाएं' कमांड है। यदि टेक्समैट गिट बंडल (गिट-टम्बल) में यह नहीं है, तो शायद इसे जोड़ने के लायक होगा।
जकूब नारबस्की

मैं TextMate में अपने प्रोजेक्ट के बेहतर रख-रखाव के लिए सिमिलिंक का उपयोग करता हूं। 25 डायरियां, 300 फाइलें। यह बिल्डडायर और अन्य अप्रासंगिक डायरियों को छिपाने में मदद करता है। हालाँकि git / TextMate इन
सिम्बलिंक के

जवाबों:


312

आप इसके लिए "git show" का उपयोग कर सकते हैं:

prompt> git show HEAD^:main.cpp > old_main.cpp

(नोट वहाँ बृहदान्त्र [है कि :के बीच] चरित्र HEAD^और main.cpp।) <revision>:<path>वाक्य रचना में वर्णन किया गया Git रेव-पार्स मैनपेज, अगले "संशोधन निर्दिष्ट" खंड में पिछले बात करने के लिए:

  • <Rev>: <path>, उदा HEAD: README,: README, मास्टर:। / README

    एक प्रत्यय :जिस पथ के नाम पर बूँद या पेड़ को दिए गए पथ पर पेड़-ईश वस्तु में होता है, उसे बृहदान्त्र से पहले नाम दिया जाता है। :path(बृहदान्त्र से पहले एक खाली हिस्से के साथ) अगले वर्णित वाक्यविन्यास का एक विशेष मामला है: दिए गए पथ पर सूचकांक में दर्ज की गई सामग्री।

    वर्तमान कार्यशील निर्देशिका के साथ शुरू होने वाला ./या ../उसके सापेक्ष एक पथ । दिए गए मार्ग को कार्यशील पेड़ की मूल निर्देशिका के सापेक्ष परिवर्तित किया जाएगा। यह एक प्रतिबद्ध या पेड़ से एक बूँद या पेड़ को संबोधित करने के लिए सबसे उपयोगी है जिसमें एक ही पेड़ की संरचना है जो काम करने वाले पेड़ के समान है।

ध्यान दें कि <path>यहां आपकी परियोजना की शीर्ष निर्देशिका यानी निर्देशिका वाली निर्देशिका के सापेक्ष पूर्ण पथ है । (या " <संशोधन> " के लिए और अधिक सटीक होने के लिए (जो सामान्य रूप से कोई भी हो सकता है <ट्री-ईश> , अर्थात ऐसा कुछ जो प्रतिनिधित्व करता है)).git/

यदि आप वर्तमान निर्देशिका के सापेक्ष पथ का उपयोग करना चाहते हैं, तो आपको ./<path>सिंटैक्स (या ../pathवर्तमान निर्देशिका से ऊपर जाने के लिए) का उपयोग करने की आवश्यकता है ।

संपादित करें 2015-01-15: सापेक्ष पथ सिंटैक्स के बारे में जानकारी जोड़ी गई


आप ज्यादातर मामलों में निम्न-स्तर (प्लंबिंग) git cat-fileकमांड का उपयोग करके समान आउटपुट प्राप्त कर सकते हैं :

prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp

3
मैं एक पूर्ण प्रति में दिलचस्पी रखता हूं, लेकिन git-show मुझे केवल अंतर दिखाता है .. मैंने - thepretty विकल्प के साथ खेलने की कोशिश की है .. शीघ्र> git शो --pretty = fuller HEAD ^ main.cpp लेकिन यह नहीं किया 'इसे हल करो।
नियनी

7
"git show HEAD ^ main.cpp" (HEAD ^ और main.cpp के बीच की जगह के साथ) "git show HEAD ^: main.cpp" ( बृहदान्त्र के साथ ': HEAD ^ और main.cpp के बीच) से अलग है।
जैकब नार atबस्की

हम्म, बृहदान्त्र के साथ मुझे यह त्रुटि दिखाई देती है, इसलिए मैंने सोचा कि बृहदान्त्र एक गलती थी। हां ऐसा लगता है कि बृहदान्त्र जाने का रास्ता है, लेकिन मैं इसे कैसे हल करूं? प्रांप्ट> git show HEAD ^: main.cpp घातक: अस्पष्ट तर्क 'HEAD ^: main.cpp': अज्ञात संशोधन या कार्यशील पेड़ में पथ नहीं। संशोधन से मार्ग को अलग करने के लिए '-' का प्रयोग करें>
neoneye

2
शायद इसका मतलब है कि आपने गलत पैथनाम दिया है (दुर्भाग्य से "गिट शो" के कारण मैजिक गिट बेहतर त्रुटि संदेश नहीं दे सकता है)। यह आपकी परियोजना की शीर्ष निर्देशिका के सापेक्ष पूर्ण पथनाम होना चाहिए: $ (git ls-tree -r --name-HEAD ^ ^ grep
main.cpp

3
डॉक्स से पूर्ण पथ के बजाय: "मौजूदा कार्य निर्देशिका के सापेक्ष ./ या ../ के साथ शुरू होने वाला पथ।" मेरे 1.8.5 संस्करण पर काम करता है।
LVB

24

जकुब के उत्तर में जोड़ने के लिए: आपको आउटपुट के साथ फ़ाइल में रीडायरेक्ट करने की भी ज़रूरत नहीं है >, यदि आप केवल टर्मिनल में फ़ाइल सामग्री को स्किम करने में रुचि रखते हैं। आप बस चला सकते हैं $ git show 58a3db6:path/to/your/file.txt

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.